NLTK WordNet动词层次结构

3
我发现WordNet中动词层次结构存在一些问题。例如,a.lowest_common_hypernyms(wn.synset('love.v.02'))返回[]
难道像实体这样的公共祖先也适用于动词吗?
动词和名词是否在同一层次结构中连接?
1个回答

3
要查找任何同义词集的顶层上义词,使用 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')]

似乎并没有一个总体/覆盖所有动词的上位词,不像实体.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
>>> 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


谢谢你的回答!对我来说看起来很奇怪,因为除了一些关于WordNet的学术论文外,在互联网上没有任何关于这个主题的内容。 - yonilx
1
如果我们看亚里士多德的形而上学定义:http://plato.stanford.edu/entries/aristotle-metaphysics/,可能会解释为什么动词没有一个总体的“意义”。 - alvas
可能的区别在于WordNet将“事物”(即参数)与“事件/动作”(即谓词)与“描述符”(即修饰语/修改语)视为不同。其中参数是可以按层次包含的,而谓词和修饰语虽然也是分层的,但不能被包含。这在某种程度上遵循亚里士多德的形而上学观点。 - alvas
是的,动词的行为不像名词那样好处理。 您可以查看这篇论文以获取对此层次结构的修复建议。 - yonilx
厉害,我不知道之前有人尝试找到动词的最高级。从计算角度来看是可行的,但是在跨语言中真正找到动词的顶层难度较大,因此谓词的最高级可能并非普遍适用=( - alvas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接