Ich habe gerade begonnen, Python zu lernen. Ich möchte ein Programm in NLTK schreiben, die einen Text in Unigramme, Bigramme bricht. Zum Beispiel, wenn der Eingabetext ist:Objekt des Typs 'Generator' hat keine len()
Funktion „I aufgrund von Fehlern traurig und enttäuscht fühle“ sollte Text erzeugen wie:
Ich bin -> fühle -> Gefühl traurig -> traurig und -> und enttäuscht -> disappointed fällig -> wegen -> zu Fehlern
Ich habe Code geschrieben, um Text in das Programm einzugeben. Hier ist die Funktion Ich versuche:
def gen_bigrams(text):
token = nltk.word_tokenize(review)
bigrams = ngrams(token, 2)
#print Counter(bigrams)
bigram_list = ""
for x in range(0, len(bigrams)):
words = bigrams[x]
bigram_list = bigram_list + words[0]+ " " + words[1]+"-->"
return bigram_list
Der Fehler Ich erhalte ist ...
for x in range(0, len(bigrams)):
TypeError: object of type 'generator' has no len()
Da die ngram Funktion einen Generator zurückkehrt, ich versucht, mit len(list(bigrams))
aber es gibt den Wert 0, Ich bekomme den gleichen Fehler. Ich habe auf andere Fragen zum Stackexchange verwiesen, aber ich verstehe immer noch nicht, wie ich das beheben kann. Ich stecke bei diesem Fehler fest. Irgendeine Problemumgehung, Vorschlag ?.
Wenn 'len (Liste (Bigramme))' kehrt '0', dann vermutlich das ist die Frage ... Sie wahrscheinlich, warum 'ngrams brauchen, um herauszufinden (Token , 2) 'gibt keine Werte zurück. – jmetz
... und den Titel und den Text der Frage entsprechend aktualisieren; im Moment ist der Titel irreführend – jmetz
'für x in bigrams' sollte funktionieren. Dann brauchen wir keine Wörter mehr = bigrams [x] '. Warum? 'x' wird Ihre' Wörter' sein –