Это зависит от того, каковы ваши «ограничения выбора» или я бы назвал это семантическими признаками, потому что в классической семантике существует мир concepts
, и для сравнения между понятиями мы должны найти
- отличительные признаки (то есть признаки понятий, которые используются для их отличия друг от друга) и
- черты сходства (то есть черты сходных понятий и подчеркивает необходимость их дифференциации)
Например:
Man is [+HUMAN], [+MALE], [+ADULT]
Woman is [+HUMAN], [-MALE], [+ADULT]
[+HUMAN] and [+ADULT] = similarity features
[+-MALE] is the discrimating features
Общей проблемой традиционной семантики и применения этой теории в вычислительной семантике является вопрос
"Есть ли конкретный список функций, которые мы можем использовать для сравнения любых
"Если да, то какие функции в этом списке?"
понятия? "
(подробнее см. Www.acl.ldc.upenn.edu/E/E91/E91-1034.pdf)
Возвращаясь к WordNet, я могу предложить 2 метода для устранения "ограничений выбора"
Во-первых, Проверьте гипернимки для распознавания признаков , но сначала вы должны решить, что является отличительными признаками. Чтобы отличить животное от человека, давайте возьмем отличительные черты как [+ -человек] и [+ -человек].
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"