4

嗨 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

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

任何建议将不胜感激!

4

3 回答 3

4

查看https://stackoverflow.com/a/27518899/610569Synset.lemmas()[0].key了解和之间的区别Synset.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'

02084071-n在 OMW 界面上搜索offset + pos 键(如同义词集的页面。

于 2016-06-13T11:26:55.620 回答
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] 或类似的可能是函数的内容。

于 2016-06-05T16:14:02.407 回答
-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 为我指明了正确的开始方向。

于 2016-06-06T13:15:01.653 回答