在 python 中使用 wordnet 分类/获取上位词类型词
categorize/ get hypernym type word using wordnet in python
在我的项目中,我必须找到特定单词的 category/hypernym 类型。
例如,如果我输入 Sushi/lion,输出将显示 food/animal。主要概念是对词进行分类。那么,我怎样才能在 Python 中使用 nltk 和 WordNet 获得它?
我不确定您的目标是否可以通过开箱即用的解决方案实现,因为所需的抽象级别非常高。在 nltk/wordnet 方面,您正在寻找单词的上位词 (supertype/superordinate)。例如,"sushi" 的上位词在第一层可能是 "seafood",而 "apple" 可能只是 "fruit"。可能您必须通过多个级别的上位词才能获得所需的输出。作为获取上位词的起点,您可以使用此代码(参见 All synonyms for word in python?):
from nltk.corpus import wordnet as wn
from itertools import chain
for i,j in enumerate(wn.synsets('apple')):
print('Meaning', i, 'NLTK ID', j.name())
print('Definition:', j.definition())
print('Hypernyms:', ', '.join(list(chain(*[l.lemma_names() for l in j.hypernyms()]))))
另请注意,同一个词对于不同的上位词可能具有不同的含义,这会使您的任务更加复杂。
编辑
实际上,这个问题有一个开箱即用的解决方案,叫做 lowest_common_hypernym
:
wn.synset('apple.n.01').lowest_common_hypernyms(wn.synset('sushi.n.01'))
虽然此功能非常好,但它不一定是 return 最明显的解决方案。在这里,它 returns [Synset('matter.n.03')]
.
在我的项目中,我必须找到特定单词的 category/hypernym 类型。
例如,如果我输入 Sushi/lion,输出将显示 food/animal。主要概念是对词进行分类。那么,我怎样才能在 Python 中使用 nltk 和 WordNet 获得它?
我不确定您的目标是否可以通过开箱即用的解决方案实现,因为所需的抽象级别非常高。在 nltk/wordnet 方面,您正在寻找单词的上位词 (supertype/superordinate)。例如,"sushi" 的上位词在第一层可能是 "seafood",而 "apple" 可能只是 "fruit"。可能您必须通过多个级别的上位词才能获得所需的输出。作为获取上位词的起点,您可以使用此代码(参见 All synonyms for word in python?):
from nltk.corpus import wordnet as wn
from itertools import chain
for i,j in enumerate(wn.synsets('apple')):
print('Meaning', i, 'NLTK ID', j.name())
print('Definition:', j.definition())
print('Hypernyms:', ', '.join(list(chain(*[l.lemma_names() for l in j.hypernyms()]))))
另请注意,同一个词对于不同的上位词可能具有不同的含义,这会使您的任务更加复杂。
编辑
实际上,这个问题有一个开箱即用的解决方案,叫做 lowest_common_hypernym
:
wn.synset('apple.n.01').lowest_common_hypernyms(wn.synset('sushi.n.01'))
虽然此功能非常好,但它不一定是 return 最明显的解决方案。在这里,它 returns [Synset('matter.n.03')]
.