2015-08-19 9 views
2

Я использую nltk здесь, чтобы опубликовать метки классификации процессов (из imagenet) моей модели. Например, моя модель может помещать ярлык «черный медведь» на изображение. Как мне определить, является ли «черный медведь» своего рода «животным» (гипонимом животного) с использованием wordnet?Как определить многословное слово A является B в wordnet?

Я пробовал this method Но уловка заключается в том, что, когда я использую код ниже, чтобы получить синхронизацию «черного медведя», я получаю пустой список! Таким образом, я не могу решить, является ли «черный медведь» а Гипонимы из «животного»

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

Есть ли решение этой проблемы? Спасибо!

+0

Возможный дубликат [Определение Гиперного или Гипонима с использованием wordnet nltk] (http://stackoverflow.com/questions/26222484/determining-hypernym-or-hyponym-using-wordnet-nltk) – alvas

ответ

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