wordnet中如何判断多词A是B?

How to determine multiword A is a B in wordnet?

我在这里使用 nltk post 处理我模型的分类标签(来自 imagenet)。例如,我的模型可能会在图像上放置标签 'black bear'。我应该如何使用wordnet确定'black bear'是否是一种'animal'(动物的下称)?

我试过了this method 但诡异的部分是,当我使用下面的代码获取 'black bear' 的同义词集时,我得到一个空列表!因此我无法确定 'black bear' 是否是 'animal'

的下位词
from nltk.corpus import wordnet as wn    
blackbear = wn.synsets('black bear')

这个问题有什么解决办法吗? 谢谢!

对于多词表达式,使用下划线代替空格,即

>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('black bear')
[]
>>> wn.synsets('black_bear')
[Synset('asiatic_black_bear.n.01'), Synset('american_black_bear.n.01')]

并从 Determining Hypernym or Hyponym using wordnet nltk 得到 hyper/hyponym:

>>> bear = wn.synsets('bear', pos='n')[0]
>>> bear.definition()
u'massive plantigrade carnivorous or omnivorous mammals with long shaggy coats and strong claws'
>>> black_bear = wn.synsets('black_bear', pos='n')[0]
>>> black_bear.definition()
u'bear with a black coat living in central and eastern Asia'
>>> hypobear = set([i for i in bear.closure(lambda s:s.hyponyms())])
>>> hyperblackbear = set([i for i in black_bear.closure(lambda s:s.hypernyms())])
>>> black_bear in hypobear
True

>>> animal = wn.synsets('animal')[0]
>>> animal.definition()
u'a living organism characterized by voluntary movement'
>>> hypoanimal = set([i for i in animal.closure(lambda s:s.hyponyms())])
>>> black_bear in hypoanimal
True
>>> bear in hypoanimal
True

但请注意,WordNet 的覆盖范围有限,尤其是在多词表达 (MWE) 方面。