NLTK WordNet动词层次结构

时间:2016-03-17 12:23:46

标签: python nlp nltk wordnet linguistics

我发现WordNet的动词层次结构存在一些问题。 例如, a.lowest_common_hypernyms(wn.synset('love.v.02'))会返回[]

对于动词,还有像entity这样的共同祖先吗?

动词是否连接到同一层次结构中的名词?

1 个答案:

答案 0 :(得分:2)

要查找任何synset的顶级上位词,请使用Synset.root_hypernyms()函数,例如:

>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('car')[0].root_hypernyms()
[Synset('entity.n.01')]
>>> wn.synsets('love')[0].root_hypernyms()
[Synset('entity.n.01')]
>>> wn.synsets('love', 'v')[0].root_hypernyms()
[Synset('love.v.01')]

似乎没有涵盖所有verbs的总体/伞形高举,而不像nouns所涵盖的entity.n.01

>>> root_hypernyms_of_nouns = Counter(chain(*[ss.root_hypernyms() for ss in wn.all_synsets(pos='n')]))
>>> len(root_hypernyms_of_nouns)
1
>>> root_hypernyms_of_nouns.items()
[(Synset('entity.n.01'), 82115)]

但你可以尝试迭代所有动词,例如:

wn.all_synsets(pos='v')

尝试为动词找到最顶级的上位词(这将是一个相当大的列表):

>>> from collections import Counter
>>> from itertools import chain
>>> from collections import Counter
>>> root_hypernyms_of_verbs = Counter(chain(*[ss.root_hypernyms() for ss in wn.all_synsets(pos='v')]))
>>> root_hypernyms_of_verbs.most_common(10)
[(Synset('change.v.01'), 1704), (Synset('change.v.02'), 1295), (Synset('act.v.01'), 1083), (Synset('move.v.02'), 1027), (Synset('make.v.03'), 659), (Synset('travel.v.01'), 526), (Synset('think.v.03'), 451), (Synset('transfer.v.05'), 420), (Synset('move.v.03'), 329), (Synset('connect.v.01'), 262)]
>>> root_hypernyms_of_verbs.keys() # This will return all root_hypernyms.

Visuwords有一个非常漂亮的交互式图表,您可以使用它来手动浏览WordNet层次结构http://visuwords.com/entity