2014-11-23 26 views
2

我試圖使用Wordnet獲取給定詞的同義詞。問題是,儘管我和這裏寫的一樣:here,它會返回錯誤。從synset返回同義詞的返回錯誤 - Python

這裏是我的代碼:

from nltk.corpus import wordnet as wn 
import nltk 

dog = wn.synset('dog.n.01') 
print dog.lemma_names 

>>> <bound method Synset.lemma_names of Synset('dog.n.01')> 


for i,j in enumerate(wn.synsets('small')): 
    print "Synonyms:", ", ".join(j.lemma_names) 

>>> Synonyms: 
    Traceback (most recent call last): 
     File "C:/Users/Python/PycharmProjects/PribliznostneVyhladavanie/testy.py", line 38, in   <module> 
    print "Synonyms:", ", ".join(j.lemma_names) 
TypeError 

我想的唯一一件事就是把一個單詞,並得到的同義詞列表。有誰知道什麼是錯的?

編輯:我試過另一個建議,我在這裏找到了stackoverflow。它也不起作用。

syns = wn.synsets('car') 
print [l.name for s in syns for l in s.lemmas] 

>>> TypeError: 'instancemethod' object is not iterable 
+1

的例子,你發現是NLTK的早期版本。有關更多詳情,請參閱下面的答案。 – Thibaut 2014-11-23 17:10:49

回答

9

您正在使用哪個版本的nltk(嘗試print nltk.__version)?你使用的是Python 2還是Python 3?看起來,在您使用的版本中,lemma_names是一種方法而不是屬性(Python 3的nltk 3.0中就是這種情況)。如果是這種情況,那麼你可以用這個代替可能解決您的代碼:

for i,j in enumerate(wn.synsets('small')): 
    print "Synonyms:", ", ".join(j.lemma_names()) 
+0

版本:sys.version_info(major = 2,minor = 7,micro = 8,releaselevel ='final',serial = 0)謝謝,它幫助了我。 – 2014-11-23 17:06:27

+0

好了,所以你似乎在Python 2中使用nltk 3。我已經更新了我的答案中的代碼以適合您的情況。 – Thibaut 2014-11-23 17:09:58

+0

這解決了我在nltk 3.2和python 2.7中的問題。非常感謝 – 2016-06-01 11:25:15

1

在Python 2 & 3個版本引理lemma_names不工作,因爲它們的方法。您必須改用lemmas()和lemma_names()。

對於如 -

dog = wn.synset('dog.n.01') print dog.lemma_names()