如何在WordNet中获取NLTK Python的Sense Key?

时间:2016-06-05 11:54:48

标签: python nlp nltk wordnet open-multilingual-wordnet

您好Stackoverflow社区

我刚刚开始修改Python NLTK并将注意力转移到Wordnet模块。

我试图获得给定引理的Sense Ky并找到以下内容:

s = wn.synset('skill.n.01')
s.lemmas # >>> [Lemma('skill.n.01.skill'), ... ]
s.lemmas[0].key # >>> 'skill%1:09:01::'

但是,此实现似乎不再受支持。

Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/testbench.py", line 59, in <module>
s.lemmas[0].key
TypeError: 'method' object is not subscriptable

我想知道是否有人能够指出我如何在给出引理或同义词的情况下获得感知键的正确方向?

任何建议都将受到高度赞赏!

3 个答案:

答案 0 :(得分:2)

请查看https://stackoverflow.com/a/27518899/610569Synset.lemmas()[0].keySynset.lemmas()[0].key()之间的区别:

>>> from nltk.corpus import wordnet as wn
>>> wn.synset('dog.n.1')
Synset('dog.n.01')
>>> wn.synset('dog.n.1').lemmas()
[Lemma('dog.n.01.dog'), Lemma('dog.n.01.domestic_dog'), Lemma('dog.n.01.Canis_familiaris')]
>>> wn.synset('dog.n.1').lemmas()[0]
Lemma('dog.n.01.dog')
>>> wn.synset('dog.n.1').lemmas()[0].name()
u'dog'

# To retrieve Princeton WordNet style keys.
>>> wn.synset('dog.n.1').lemmas()[0].key()
u'dog%1:05:00::'

对于Open Multilingual WordNet,使用offset + pos键会更容易,例如:

>>> from nltk.corpus import wordnet as wn
>>> ss = wn.synset('dog.n.1')
>>> ss.offset()
2084071
>>> ss.pos()
u'n'
>>> '{}-{}'.format(str(ss.offset()).zfill(8), ss.pos())
'02084071-n'

在OMW界面上搜索偏移+ pos键(例如02084071-n):http://compling.hss.ntu.edu.sg/omw/cgi-bin/wn-gridx.cgi?gridmode=grid将使您进入同义词组的一个很好的可视化页面。

答案 1 :(得分:1)

如果您查看此模块的示例,例如在http://www.nltk.org/howto/wordnet.html中,lemmas是一种方法 - 所以你需要在它之后用()调用它,例如:

s = wn.synset('skill.n.01')
s.lemmas() # >>> [Lemma('skill.n.01.skill'), ... ]

然后您可以像这样访问返回值:

s.lemmas()[0].key # >>> 'skill%1:09:01::'

TypeError: 'method' object is not subscriptable错误消息告诉您正在尝试将方法或函数视为列表 - 当您看到类似的错误时,查找您拥有的[0]或类似的内容是一个功能。

答案 2 :(得分:-1)

所以我明白了。在对NLTK的Wordnet API进行了一些挖掘后,我注意到API似乎需要像这样调用密钥:

s = wn.synset('skill.n.01')
print(s.lemmas) # >>> <bound method Synset.lemmas of Synset('skill.n.01')>

print(str(s.lemmas()[0]._key)) #>>>skill%1:09:01::

这样,调用._key成功返回Sense Key。

感谢@bouteillebleu指出我正确的方向开始。

M