2016-07-11 30 views
1

Ich verwende text.similar('example') Funktion von nltk.Text Modul.Überschreiben Sie eine Funktion in Nltk - Fehler in ContextIndex Klasse

(Welche druckt die ähnliche Wörter für ein gegebenes Wort basiert auf corpus.)

Allerdings möchte ich in einer Liste, die Liste von Wörtern zu speichern. Aber die Funktion selbst gibt None zurück.

#text is a variable of nltk.Text module 
simList = text.similar("physics") 
>>> a = text.similar("physics") 
the and a in science this which it that energy his of but chemistry is 
space mathematics theory as mechanics 
>>> a 
>>> a 
# a contains no value. 

Also sollte ich die Quellfunktion selbst ändern? Aber ich denke nicht, dass es eine gute Übung ist. Wie kann ich diese Funktion überschreiben, damit sie den Wert zurückgibt?

Edit - Referencing this thread, versuchte ich mit der ContextIndex Klasse. Aber ich erhalte den folgenden Fehler.

File "test.py", line 39, in <module> 
    text = nltk.text.ContextIndex(word.lower() for word in words) File "/home/kenden/den/codes/nlpenv/local/lib/python2.7/site-packages/nltk/text.py", line 56, in __init__ 
    for i, w in enumerate(tokens)) File "/home/kenden/den/codes/nlpenv/local/lib/python2.7/site-packages/nltk/probability.py", line 1752, in __init__ 
    for (cond, sample) in cond_samples: File "/home/kenden/den/codes/nlpenv/local/lib/python2.7/site-packages/nltk/text.py", line 56, in <genexpr> 
    for i, w in enumerate(tokens)) File "/home/kenden/den/codes/nlpenv/local/lib/python2.7/site-packages/nltk/text.py", line 43, in _default_context 
    right = (tokens[i+1].lower() if i != len(tokens) - 1 else '*END*') TypeError: object of type 'generator' has no len() 

Das ist meine Linie 39 von test.py

text = nltk.text.ContextIndex(word.lower() for word in words) 

Wie kann ich dieses Problem lösen?

+3

Mögliche Duplikat [So sparen nltk Text.similar() mit variabler] (http://stackoverflow.com/questions/10537720/how- zu speichern-nltk-textähnlich-mit-variabel) –

Antwort

1

Sie erhalten den Fehler, weil der ContextIndex-Konstruktor versucht, die len() Ihrer Token-Liste (das Argument tokens) zu übernehmen. Aber Sie übergeben es tatsächlich als Generator, daher der Fehler. Um das Problem zu vermeiden, geben Sie einfach eine echte Liste, zum Beispiel:

text = nltk.text.ContextIndex(list(word.lower() for word in words))