NLTK wordnet界面中的第0个synset

时间:2013-08-27 16:25:40

标签: python nlp semantics nltk wordnet

从semcor语料库(http://www.cse.unt.edu/~rada/downloads.html),感官没有映射到wordnet的更高版本。奇迹般地,映射可以在NLTK WordNet API中找到:

>>> from nltk.corpus import wordnet as wn
# Emunerate the possible senses for the lemma 'delayed'
>>> wn.synsets('delayed')
[Synset('delay.v.01'), Synset('delay.v.02'), Synset('stay.v.06'), Synset('check.v.07'), Synset('delayed.s.01')]
>>> wn.synset('delay.v.01')
Synset('delay.v.01')
# Magically, there is a 0th sense of the word!!!
>>> wn.synset('delayed.a.0')
Synset('delayed.s.01')

我已经检查了代码和API(http://nltk.googlecode.com/svn/trunk/doc/api/nltk.corpus.reader.wordnet.Synset-class.htmlhttp://nltk.org/_modules/nltk/corpus/reader/wordnet.html),但我无法找到它们如何进行不应该存在的神奇映射(例如{{ 1}} - > delayed.a.0)。

是否有人知道NLTK Wordnet API代码的哪一部分进行了神奇的映射?

1 个答案:

答案 0 :(得分:4)

我猜这是个错误。执行wn.synset('delayed.a.0')时,方法中的前两行是:

lemma, pos, synset_index_str = name.lower().rsplit('.', 2)
synset_index = int(synset_index_str) - 1

所以在这种情况下,synset_index的值是-1,它是python中的有效索引。在查找lemmadelayedposa的同义词数组时,它不会失败。

通过这种行为,你可以做一些棘手的事情:

>>> wn.synset('delay.v.-1')
Synset('stay.v.06')