使用NLTK 3.0中的Wordnet从Synset中提取单词

15

不久之前,有人在stackoverflow上提出了一个问题如何使用NLTK的wordnet包检索给定synset的单词列表。这是其中一个建议的回答:

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

在使用NLTK 3.0运行此代码会出现TypeError: 'instancemethod' object is not subscriptable的错误。

我尝试了之前提出的每个解决方案(即链接页面上描述的每个解决方案),但是每个都报错。因此我想问:是否有可能使用NLTK 3.0打印一组synsets的单词?我将感谢其他人在这个问题上能够提供的任何建议。


使用最新的NLTK而不是更稳定(尽管较早)的版本是否有原因? - user3898238
我在多语言环境中工作,我认为开放式多语言词网只在3.0中实现。但如果它在早期版本中可用,我非常乐意倾听! - duhaime
看起来OMW已经通过NLTK可用了一段时间。我将尝试恢复到一个更早且更稳定的版本... - duhaime
1
你能展示一下你失败的尝试,例如你尝试了什么以及出现了哪些错误或投诉吗? - user3898238
具体的错误信息和一个最小可重现示例会很有帮助。 - Dan
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - duhaime
3个回答

15

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__()方法(因此不可下标访问)。


我在这个语法上遇到了错误: nltk.version'3.0.0'。我的NLTK版本是3.2.1,我尝试了nltk.version '3.2.1',但是还是出现了错误。 - Rajesh Mappu

10
你也可以使用lemma_names()直接前往词形的名称:
>>> wordnet.synset('dog.n.1').lemma_names()
['dog', 'domestic_dog', 'Canis_familiaris']

并且它适用于多种语言

>>>> wordnet.synset('dog.n.1').lemma_names(lang='jpn')
['イヌ', 'ドッグ', '洋犬', '犬', '飼犬', '飼い犬']

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接