Расчет расстояний в WordNet - PullRequest
0 голосов
/ 01 июня 2018

Используя Python 3.5, NLTK и WordNet (последняя версия), я вычисляю wup_simility () между всеми парами синтаксиса слов «непрерывный» и «текущий».Каждое расстояние «Нет», хотя простые английские значения этих двух слов кажутся похожими.Я также заметил, что части речи этих слов - «прилагательное» и «прилагательное спутник», соответственно.

Является ли ошибка вычисления из-за того, что части речи различны?Есть ли способ как-то объединить эти две части речи, чтобы обойти проблему?

Заранее большое спасибо.Мой фрагмент кода приведен ниже.

import nltk
from nltk.corpus import wordnet as wn
sl1 = wn.synsets("continuous")
sl2 = wn.synsets("ongoing")
for x in sl1:
    for y in sl2:
        print(x, y, x.wup_similarity(y))

1 Ответ

0 голосов
/ 02 июня 2018

Не должно быть никакого «сбоя», как при возникновении подобной ошибки.

Тем не менее, он возвращает None, например,

from nltk.corpus import wordnet as wn
sl1 = wn.synsets("dog")
sl2 = wn.synsets("cat")
for x in sl1:
    for y in sl2:
        print(x, y, x.wup_similarity(y))

[out]:

Synset('dog.n.01') Synset('cat.n.01') 0.8571428571428571
Synset('dog.n.01') Synset('guy.n.01') 0.631578947368421
Synset('dog.n.01') Synset('cat.n.03') 0.631578947368421
Synset('dog.n.01') Synset('kat.n.01') 0.25
Synset('dog.n.01') Synset('cat-o'-nine-tails.n.01') 0.42105263157894735
Synset('dog.n.01') Synset('caterpillar.n.02') 0.4
Synset('dog.n.01') Synset('big_cat.n.01') 0.8571428571428571
Synset('dog.n.01') Synset('computerized_tomography.n.01') 0.1
Synset('dog.n.01') Synset('cat.v.01') None
Synset('dog.n.01') Synset('vomit.v.01') None
Synset('frump.n.01') Synset('cat.n.01') 0.48
Synset('frump.n.01') Synset('guy.n.01') 0.5714285714285714
Synset('frump.n.01') Synset('cat.n.03') 0.5714285714285714
Synset('frump.n.01') Synset('kat.n.01') 0.4
...

Вы можете просто проверить None и присвоить его нулю, например,

sl1 = wn.synsets("dog")
sl2 = wn.synsets("cat")
for x in sl1:
    for y in sl2:
        score = x.wup_similarity(y)
        score = score if score else 0
        print(x, y, score)

[out]:

Synset('dog.n.01') Synset('cat.n.01') 0.8571428571428571
Synset('dog.n.01') Synset('guy.n.01') 0.631578947368421
Synset('dog.n.01') Synset('cat.n.03') 0.631578947368421
Synset('dog.n.01') Synset('kat.n.01') 0.25
Synset('dog.n.01') Synset('cat-o'-nine-tails.n.01') 0.42105263157894735
Synset('dog.n.01') Synset('caterpillar.n.02') 0.4
Synset('dog.n.01') Synset('big_cat.n.01') 0.8571428571428571
Synset('dog.n.01') Synset('computerized_tomography.n.01') 0.1
Synset('dog.n.01') Synset('cat.v.01') 0
Synset('dog.n.01') Synset('vomit.v.01') 0
Synset('frump.n.01') Synset('cat.n.01') 0.48
Synset('frump.n.01') Synset('guy.n.01') 0.5714285714285714
Synset('frump.n.01') Synset('cat.n.03') 0.5714285714285714
Synset('frump.n.01') Synset('kat.n.01') 0.4
...