从synset returns error - Python获取同义词

时间:2014-11-23 16:50:55

标签: python nlp nltk wordnet

我正在尝试使用Wordnet获取给定单词的同义词。问题是,尽管我做的与此处写的相同:here,但它返回错误。

这是我的代码:

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

2 个答案:

答案 0 :(得分: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())

答案 1 :(得分:1)

在Python 2&amp; 3个版本的lemmas和lemma_names不能正常工作,因为它们是方法。你必须使用lemmas()和lemma_names()代替。

例如 -

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