2011-03-30 2 views
6

Есть ли способ захвата ограничений выбора WordNet (например, + анимация, + человек и т. Д.) Из synsets через NLTK? Или есть ли другой способ предоставления семантической информации о synset? Ближайшим, к которому я мог добраться, были гипернимные отношения.Ограничения выбора Wordnet в NLTK

ответ

4

Это зависит от того, что ваше «селекционного ограничения» или я бы назвал его семантическими особенности, потому что в классической семантике, существует мир concepts и сравнить между понятиями, мы должны найти

  • дискриминацию особенности (то есть признаки понятий, которые используются, чтобы отличить их друг от друга) и
  • особенности подобия (то есть особенности понятий подобных и выдвигает на первый план необходимость дифференцировать их)

Например:

Man is [+HUMAN], [+MALE], [+ADULT] 
Woman is [+HUMAN], [-MALE], [+ADULT] 

[+HUMAN] and [+ADULT] = similarity features 
[+-MALE] is the discrimating features 

Общей проблемой традиционной семантики и применение этой теории в вычислительной семантики является вопрос о

«Есть конкретный перечень функций, которые мы можем использовать для сравнения любая

«Если да, то каковы функции этого списка?» concept? "

(см www.acl.ldc.upenn.edu/E/E91/E91-1034.pdf для более подробной информации)

Возвращаясь к WordNet, я могу предложить 2 способа решить " ограничения выбора "

Во-первых, Проверьте гипернимки на отличительные черты, но сначала вы должны решить, какие отличительные черты. Чтобы отличить животное от людей, давайте рассмотрим отличительные черты как [+ -human] и [+ -animal].

from nltk.corpus import wordnet as wn 

# Concepts to compare 
dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X 
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9 

# To access the hypernym_paths()[0] 
# It's weird for that hypernym_paths gives a list of list rather than a list, nevertheless it works. 
dog_hypernyms = dog_sense.hypernym_paths()[0] 
jb_hypernyms = jb_sense.hypernym_paths()[0] 


# Discriminating features in terms of concepts in WordNet 
human = wn.synset('person.n.01') # i.e. [+human] 
animal = wn.synset('animal.n.01') # i.e. [+animal] 

try: 
    assert human in jb_hypernyms and animal not in jb_hypernyms 
    print "James Baldwin is human" 
except: 
    print "James Baldwin is not human" 

try: 
    assert human in dog_hypernyms and animal not in dog_hypernyms 
    print "Dog is an animal" 
except: 
    print "Dog is not an animal" 

Во-вторых, Проверка мер подобия как @Jacob предложил.

dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X 
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9 

# Features to check against whether the 'dubious' concept is a human or an animal 
human = wn.synset('person.n.01') # i.e. [+human] 
animal = wn.synset('animal.n.01') # i.e. [+animal] 

if dog_sense.wup_similarity(animal) > dog_sense.wup_similarity(human): 
    print "Dog is more of an animal than human" 
elif dog_sense.wup_similarity(animal) < dog_sense.wup_similarity(human): 
    print "Dog is more of a human than animal" 
+0

Благодарим за подробный ответ. Некоторое время назад я понял, что не могу найти сходство/дискриминационные функции в WordNet из-за причин, о которых вы упомянули. – erickrf

0

Вы можете попробовать использовать некоторые функции подобия с помощью handpicked synsets и использовать это для фильтрации. Но это по существу то же самое, что и после гипернимного дерева - afaik, все функции сходства wordnet используют гипернимное расстояние в своих вычислениях. Кроме того, существует множество необязательных атрибутов синхронизации, которые могут стоить изучить, но их присутствие может быть очень непоследовательным.

Смежные вопросы