2016-04-14 11 views
0

Ich versuche, Wordnet als Thesarus zu verwenden, also habe ich eine Liste von Wörtern und ich muss für jedes Wort seine Synonyme sammeln. Ich habe versucht, dieseSuche die Synonyme für Wörter in Wordnet

from nltk.corpus import wordnet as wn 
for i,j in enumerate(wn.synsets('dog')): 
    print (j.lemma_names) 

Dieser Code die folgende Ausgabe

<bound method Synset.lemma_names of Synset('dog.n.01')> 
<bound method Synset.lemma_names of Synset('frump.n.01')> 
<bound method Synset.lemma_names of Synset('dog.n.03')> 
<bound method Synset.lemma_names of Synset('cad.n.01')> 
<bound method Synset.lemma_names of Synset('frank.n.02')> 
<bound method Synset.lemma_names of Synset('pawl.n.01')> 
<bound method Synset.lemma_names of Synset('andiron.n.01')> 
<bound method Synset.lemma_names of Synset('chase.v.01')> 

Aber ich will gibt nur die Synonyme in einer Liste sammeln, so wird der Ausgang sein wie diese

[ 'frump' , 'cad', 'frank', 'Klinke', 'andiron', 'chase']

+0

Was passiert, wenn Sie die letzte Zeile 'print (j.lemma_names)' in 'print (j.lemma_names())' ändern? – davedwards

Antwort

0

Wie Ihre Ausgabe zeigt, Lemma_Name ist eine Methode und keine Eigenschaft. Blow-Code funktioniert wie erwartet:

from nltk.corpus import wordnet as wn 
result = [st.lemma_names()[0] for st in wn.synsets('dog')] 
print(result) 

Die Ausgabe lautet:

[u'dog', u'frump', u'dog', u'cad', u'frank', u'pawl', u'andiron', u'chase'] 

Bitte beachten Sie, dass die Einträge in der Liste sind von Unicode-Strings. Deshalb sehen Sie den führenden u in der Ausgabe.