python - NLTK WordNet 动词层次结构

标签 python nlp nltk wordnet linguistics

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

难道动词也没有像 entity 这样的共同祖先吗?

动词甚至与同一层次结构中的名词相连吗?

最佳答案

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

entity.n.01 涵盖的 nouns 不同,似乎没有涵盖所有 verbs 的包罗万象的上位词:

>>> 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

关于python - NLTK WordNet 动词层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36060492/

相关文章:

python - 将 a(字符串或整数)划分为 min(长度或值)为 2 的 n 个元素

Python 控制台全屏?也许使用 os.system?

python - WordNetLemmatizer : Different handling of wn. ADJ 和 wn.ADJ_SAT?

python - k 组合的迭代器

python - lxml.etree.ElementTree 破坏变音符号

python - 替换长列表中的元素Python

python - gensim 为 tf-idf 模型创建字典时是否使用词干提取?

java - 删除数据库中没有的单词

python - 在 Python 列表中查找特定索引的下一个元素值

nltk - 如何减少 Penn Treebank 中 POS 标签的数量? -NLTK(Python)