在NLTK 3.0中使用Wordnet从Synset提取Word
nlp
nltk
python
wordnet
18
0

前一段时间,SO上的某人问如何使用NLTK的wordnet包装器检索给定同义词集的单词列表 。这是建议的响应之一:

for synset in wn.synsets('dog'):
    print synset.lemmas[0].name

使用NLTK 3.0运行此代码会产生TypeError: 'instancemethod' object is not subscriptable

我尝试了每个先前提出的解决方案(上面链接页面上描述的每个解决方案),但是每个都抛出错误。因此,我想问:NLTK 3.0是否可以为同义词集列表打印单词?我将很感谢其他人在这个问题上可以提供的任何建议。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

采用:

wn.synset('dog.n.1').name() 

代替:

wn.synset('dog.n.1').name 

因为NLTK更改了Synset属性以获取函数。参见https://github.com/nltk/nltk/commit/ba8ab7e23ea2b8d61029484098fd62d5986acd9c

这是对NLTK API进行更改以适合py3.x的一个很好的列表: https : //github.com/nltk/nltk/wiki/Porting-your-code-to-NLTK-3.0

收藏
评论

WordNet在NLTK 3.0中工作正常。您只是以错误的方式访问引理(和名称)。尝试以下方法:

>>> import nltk
>>> nltk.__version__
'3.0.0'
>>> from nltk.corpus import wordnet as wn
>>> for synset in wn.synsets('dog'):
    for lemma in synset.lemmas():
        print lemma.name()


dog
domestic_dog
Canis_familiaris
frump
dog
dog
cad
bounder
blackguard
...

synset.lemmas是一种方法,没有__getitem__()方法(因此不可下标)。

收藏
评论

您也可以使用lemma_names()直接进入引理名称:

>>> wordnet.synset('dog.n.1').lemma_names()
['dog', 'domestic_dog', 'Canis_familiaris']

它适用于多种语言

>>>> wordnet.synset('dog.n.1').lemma_names(lang='jpn')
['イヌ', 'ドッグ', '洋犬', '犬', '飼犬', '飼い犬']
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题