Определение гипернима или гипонима с помощью wordnet nltk

Я хочу проверить связь гипернимов/гипонимов между двумя словами (данными пользователем), что означает, что любое из них может быть гипернимом другого, или также может быть так, что между ними нет гипернимного отношения. Могу ли я использовать path_similarity для того же. Я пытаюсь сделать так. Если вы можете предложить какой-либо лучший метод для этого. Я также хочу знать, лучше ли проверить то же самое из запроса sparql

 first=wn.synset('automobile.n.01')
 second=wn.synset('car.n.01')
 first.path_similarity(second) 

person ankita singh    schedule 06.10.2014    source источник
comment
Вы не предоставили никаких данных RDF или ссылки на какие-либо данные RDF, а SPARQL — это язык запросов RDF, поэтому мы не можем ничего предложить по каким-либо запросам SPARQL. Есть ли данные RDF, которые вас интересуют?   -  person Joshua Taylor    schedule 07.10.2014


Ответы (1)


Во-первых, есть разница между word и synset/concept в wordnet.

Здесь мы видим, что одно слово может иметь несколько значений (т.е. ссылки на несколько понятий):

>>> from nltk.corpus import wordnet as wn
>>> car = 'car'
>>> auto = 'automobile'
>>> wn.synsets(auto)
[Synset('car.n.01'), Synset('automobile.v.01')]
>>> wn.synsets(car)
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')]

И в этом случае «автомобиль» и «автомобиль» могут относиться к одному и тому же Synset('car.n.01'), и если да, то они не имеют гипо/гиперонимических отношений.

Также есть понятие lemma, которое только усложнит ситуацию, поэтому мы его пока пропустим.

Допустим, вы сравниваете не слова, а синсеты, тогда вы можете просто найти все гипонимы синсета и посмотреть, встречается ли внутри него другой синсет.

Если вы сравниваете простые слова, см. Как получить все гипонимы слова/синсета в python nltk и wordnet?

Ниже показано, как сравнивать синсеты. Например, я буду использовать «фрукты» и «яблоко», что более логично, чем «автомобиль» и «автомобиль», поскольку для «автомобиля» и «автомобиля» существует только один синтаксис существительных.

>>> from nltk.corpus import wordnet as wn
>>>
>>> fruit = 'fruit'
>>> wn.synsets(fruit)
[Synset('fruit.n.01'), Synset('yield.n.03'), Synset('fruit.n.03'), Synset('fruit.v.01'), Synset('fruit.v.02')]
>>> wn.synsets(fruit)[0].definition()
u'the ripened reproductive body of a seed plant'
>>> fruit = wn.synsets(fruit)[0]
>>> 
>>> apple = 'apple'
>>> wn.synsets(apple)
[Synset('apple.n.01'), Synset('apple.n.02')]
>>> wn.synsets(apple)[0].definition()
u'fruit with red or yellow or green skin and sweet to tart crisp whitish flesh'
>>> apple = wn.synsets(apple)[0]
>>>

Ниже мы видим, что яблоко не входит в прямые гипонимы фруктов:

>>> fruit.hyponyms()
[Synset('accessory_fruit.n.01'), Synset('achene.n.01'), Synset('acorn.n.01'), Synset('aggregate_fruit.n.01'), Synset('berry.n.02'), Synset('buckthorn_berry.n.01'), Synset('buffalo_nut.n.01'), Synset('chokecherry.n.01'), Synset('cubeb.n.01'), Synset('drupe.n.01'), Synset('ear.n.05'), Synset('edible_fruit.n.01'), Synset('fruitlet.n.01'), Synset('gourd.n.02'), Synset('hagberry.n.01'), Synset('hip.n.05'), Synset('juniper_berry.n.01'), Synset('marasca.n.01'), Synset('may_apple.n.01'), Synset('olive.n.01'), Synset('pod.n.02'), Synset('pome.n.01'), Synset('prairie_gourd.n.01'), Synset('pyxidium.n.01'), Synset('quandong.n.02'), Synset('rowanberry.n.01'), Synset('schizocarp.n.01'), Synset('seed.n.01'), Synset('wild_cherry.n.01')]
>>> 
>>> apple in fruit.hyponyms()
False

Итак, мы должны перебрать все гипонимы и посмотреть, есть ли яблоко в одном из них:

>>> hypofruits = set([i for i in fruit.closure(lambda s:s.hyponyms())])
>>> apple in hypofruits
True

Вот оно! Для полноты:

>>> hyperapple = set([i for i in apple.closure(lambda s:s.hypernyms())])
>>> fruit in hyperapple
True
>>> hypoapple = set([i for i in apple.closure(lambda s:s.hyponyms())])
>>> fruit in hypoapple
False
>>> hyperfruit = set([i for i in fruit.closure(lambda s:s.hypernyms())])
>>> apple in hyperfruit
False
person alvas    schedule 07.10.2014