Erstellen Sie neue Token und Tupel aus bestehenden, basierend auf Bedingungen

Das ist sehr verwandt mit einer vorherigen Frage, aber ich habe Schwierigkeiten, mich für meinen Anwendungsfall anzupassen.

Ich habe einen Satz: "Forbes Asia 200 Best Under 500 Billion 2011"

Ich habe tokens wie:

 oldTokens = [u'Forbes', u'Asia', u'200', u'Best', u'Under', u'500', u'Billion', u'2011'] 

Und die Indizes, wo ein früherer Parser herausgefunden hat, wo es Ort oder Nummernschlitze geben sollte:

 numberTokenIDs = {(7,): 2011.0, (2,): 200.0, (5,6): 500000000000.00} locationTokenIDs = {(0, 1): u'Forbes Asia'} 

Die Token-IDs entsprechen dem Index der Token, wo es Orte oder Zahlen gibt, das Ziel ist es, einen neuen Satz von Token wie zu erhalten:

 newTokens = [u'ForbesAsia', u'200', u'Best', u'Under', u'500Billion', u'2011'] 

Mit neuer Nummer und Ort tokenIDs vielleicht wie (um zu vermeiden, Index außerhalb der Grenzen Ausnahmen):

 numberTokenIDs = {(5,): 2011.0, (1,): 200.0, (4,): 500000000000.00} locationTokenIDs = {(0,): u'Forbes Asia'} 

Im Wesentlichen möchte ich durch die neue reduzierte Menge von Token gehen, und in der Lage sein, letztlich einen neuen Satz namens:

"LOCATION_SLOT NUMBER_SLOT Best Under NUMBER_SLOT NUMBER_SLOT"

Indem du durch den neuen Satz von Token gehst und die richtige tokenID entweder mit NUMBER_SLOT oder NUMBER_SLOT . Wenn ich das mit dem aktuellen Satz von Nummern und Ort-Token-IDs tat, würde ich:

"LOCATION_SLOT LOCATION_SLOT NUMBER_SLOT Best Under NUMBER_SLOT NUMBER_SLOT NUMBER_SLOT".

Wie würde ich das machen?

Ein anderes Beispiel ist:

 Location token IDs are: (0, 1) Number token IDs are: (3, 4) 

Alte ProbeTokens [u'United', u'Kingdom', u'USD', u'1.240', u'billion']

Wo möchte ich beide löschen Token und auch ändern Ort und Nummer Token-IDs in der Lage sein, den Satz zu ersetzen wie:

 sampleTokens[numberTokenID] = "NUMBER_SLOT" sampleTokens[locationTokenID] = "LOCATION_SLOT" 

So dass die ersetzten Token sind [u'LOCATION_SLOT', u'USD', u'NUMBER_SLOT']

Beachten Sie, dass die Verkettung alle Werte im Tupel verketten sollte, wenn es mehr als eine (auch das Tupel könnte auch> 2 Elemente, zB The United States of America ) enthalten.

One Solution collect form web for “Erstellen Sie neue Token und Tupel aus bestehenden, basierend auf Bedingungen”

Das sollte funktionieren (wenn ich richtig verstanden habe):

 token_by_index = dict(enumerate(oldTokens)) groups = numberTokenIDs.keys() + locationTokenIDs.keys() for group in groups: token_by_index[group[0]] = ''.join(token_by_index.pop(index) for index in group) newTokens = [token for _, token in sorted(token_by_index.items(), key=lambda (index, _): index)] 

Um die neuen Token zu finden:

 new_index_by_token = dict(map(lambda (i, t): (t, i), enumerate(newTokens)) numberTokenIDs = {(new_index_by_token[token_by_index[group[0]]],): value for group, value in numberTokenIDs.items()} locationTokenIDs = {(new_index_by_token[token_by_index[group[0]]],): value for group, value in locationTokenIDs.items()} 
  • Tupel to List - Python / PostgreSQL Rückgabetyp von SETOF Record
  • Python-Liste von (str, int) Tupel Wörterbücher
  • Schreiben Sie numpy Array mit seiner Größe auf Binärdatei
  • Wie man Tupel hinzufügt
  • Unterscheidung zwischen python str und tupelobjekten [duplizieren]
  • Hinzufügen einer Liste in ein Tupel?
  • Subtrahieren von 2 Listen in Python
  • Python - erhalten Liste der Tupel ersten Index?
  • Kodierung in Tupel Python
  • Python Named Tupel zum Wörterbuch
  • Warum kann ich keine Liste als Dict-Key in Python verwenden?
  • Python ist die beste Programmiersprache der Welt.