Найти наименьший распространенный гиперный, заданный несколькими словами в WordsNet (Python)

Если у меня есть список слов в Python, таких как:

words = ["blue", "red", "ball"]

Есть ли способ программно создать гипернымы для этой группы слов, используя WordNet?

1 ответ

Во-первых, посмотрите /questions/14610099/sravnivaya-sinonimyi-nltk/14610108#14610108 чтобы заметить разницу между "смыслом" (синтаксис / концепция) и "словами" (в контексте wordnet, лемм).

Учитывая два набора (НЕ слова), можно найти самый низкий общий гиперный между ними:

>>> from nltk.corpus import wordnet as wn

# A word can represent multiple meaning (aka synsets)
>>> wn.synsets('dog')
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]

>>> wn.synsets('cat')
[Synset('cat.n.01'), Synset('guy.n.01'), Synset('cat.n.03'), Synset('kat.n.01'), Synset('cat-o'-nine-tails.n.01'), Synset('caterpillar.n.02'), Synset('big_cat.n.01'), Synset('computerized_tomography.n.01'), Synset('cat.v.01'), Synset('vomit.v.01')]

>>> wn.synsets('dog')[0].definition()
u'a member of the genus Canis (probably descended from the common wolf) that has been domesticated by man since prehistoric times; occurs in many breeds'

>>> wn.synsets('cat')[0].definition()
u'feline mammal usually having thick soft fur and no ability to roar: domestic cats; wildcats'

>>> dog = wn.synsets('dog')[0]
>>> cat = wn.synsets('cat')[0]


>>> cat.lowest_common_hypernyms(dog)
[Synset('carnivore.n.01')]

См. http://www.nltk.org/howto/wordnet_lch.html

Надежны ли самые распространенные гиперны?

Wordnet - это ресурс, созданный вручную, поэтому насколько он надежен, зависит от того, почему и как был создан синсет для всей онтологии WordNet.

Могу ли я использовать эту информацию для своей задачи НЛП?

Возможно... Но, скорее всего, это не полезно.

Можно ли сравнить более 2-х наборов?

Не совсем. Вы должны сделать многократный попарный поиск, например

>>> mouse = wn.synsets('mouse')[0]
>>> cat = wn.synsets('cat')[0]
>>> dog = wn.synsets('dog')[0]

>>> dog.lowest_common_hypernyms(cat)
[Synset('carnivore.n.01')]
>>> cat.lowest_common_hypernyms(mouse)
[Synset('placental.n.01')]
>>> dog.lowest_common_hypernyms(mouse)
[Synset('placental.n.01')]

>>> placental = dog.lowest_common_hypernyms(mouse)[0]
>>> carnivore = dog.lowest_common_hypernyms(cat)[0]
>>> placental.lowest_common_hypernyms(carnivore)
[Synset('placental.n.01')]

Но вы можете видеть, насколько это неэффективно. Так что проще, если вы переписываете свой собственный код, чтобы пересечь онтологию WordNet и найти наименьший распространенный гиперный, учитывая N нет. из наборов вместо того, чтобы делать это попарно.

Другие вопросы по тегам