如何在WordNet中为NLTK Python获取Sense密钥?

如何在WordNet中为NLTK Python获取Sense密钥?,python,nlp,nltk,wordnet,open-multilingual-wordnet,Python,Nlp,Nltk,Wordnet,Open Multilingual Wordnet,Hi Stackoverflow社区 我刚刚开始修补Python NLTK,并将注意力转向Wordnet模块 我试图得到给定引理的意义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

Hi Stackoverflow社区

我刚刚开始修补Python NLTK,并将注意力转向Wordnet模块

我试图得到给定引理的意义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
回溯(最近一次呼叫最后一次):
文件“C:/Users/Admin/PycharmProjects/momely/placementarchitect/testbench.py”,第59行,在
s、 引理[0]。键
TypeError:“方法”对象不可下标
我想知道是否有人能给我指出正确的方向,在给定引理或语法集的情况下,我如何才能得到感知键


任何建议都将不胜感激

如果您查看此模块的一个示例,例如,在中,
引理
是一个方法-因此您需要在它后面用()调用它,例如:

s = wn.synset('skill.n.01')
s.lemmas() # >>> [Lemma('skill.n.01.skill'), ... ]
然后可以访问返回值,如下所示:

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

TypeError:“method”对象不可订阅
错误消息告诉您试图将方法或函数视为列表-当您看到这样的错误时,请查找[0]或与之类似的可能是函数的内容。

因此我找到了答案。在深入研究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::
s=wn.synset('skill.n.01'))
打印(s.引理)#>>
打印技能%1:09:01::
因此,call.\u键成功返回Sense键

感谢@bouteillebleu为我指明了正确的开始方向

M

看看,
Synset.lemmas()[0].key
Synset.lemmas()[0].key()之间的区别:

例如,使用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界面上搜索offset+pos键(例如,
02084071-n
)将使您进入synset的可视化页面。

确定。这样就解决了TypeError,但它不返回sense键。它返回以下内容:。感知键应该如下所示:技能%1:09:01::
>>> 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'