如何确定多字A是wordnet中的B?

时间:2015-08-19 13:40:34

标签: python nltk wordnet

我在这里使用nltk发布我的模型的进程分类标签(来自imagenet)。例如,我的模型可能会贴上“黑熊”标签。在图像上。我应该如何确定黑熊是否'是一种使用wordnet的动物'(动物的下颌)?

我试过this method 但欺骗的部分是,当我使用下面的代码来获得黑熊的同义词时,我得到一个空列表!因此,我无法决定是否“黑熊”。是动物'

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

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

1 个答案:

答案 0 :(得分:2)

对于多字表达式,请使用下划线而不是空格,即

>>> 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得到超/下位词:

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