Вне индекса в НЛП - PullRequest
       6

Вне индекса в НЛП

0 голосов
/ 23 января 2020

Я пытаюсь импортировать предложения, а затем выбрать каждое слово и сравнить его с определенным словом (здесь это «игра»)

Код:

from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet 

mytext = "Hello Adam how are you? I hope everything is going well. Today is a good day, see you dude."

print(sent_tokenize(mytext))
y = sent_tokenize(mytext)
print(y[0])
x = word_tokenize(y[0])

print(x[0])
print(x[1])
print(x[2])
print(x[3])



for i in range (9):
    syn = wordnet.synsets(x[i])
    if syn:
        syn = syn[0]
    else:
        continue
    w1 = wordnet.synset('play.n.01')
    w2 = wordnet.synset(syn.name())
    print(w1.wup_similarity(w2)) 

Но код получает ошибку после 3-й итерации с 'out of index' error.

IndexError                                Traceback (most recent call last)
<ipython-input-202-75ef16a26fe4> in <module>()
     18 
     19 for i in range (9):
---> 20     syn = wordnet.synsets(x[i])
     21     if syn:
     22         syn = syn[0]

IndexError: list index out of range

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 23 января 2020

Вы перебираете свой массив x, начиная со слова tokens. В массиве нет 9 элементов, поэтому, когда i пытается go выше 3, он не может найти индексированный элемент в списке.

Используйте длину массива x в качестве диапазона:

import nltk
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet 

mytext = "Hello Adam how are you? I hope everything is going well. Today is a good day, see you dude."

print(sent_tokenize(mytext))
y = sent_tokenize(mytext)
print(y[0])
x = word_tokenize(y[0])
print(x)

for i in range(len(x)):
    syn = wordnet.synsets(x[i])
    if syn:
        syn = syn[0]
    else:
        print('no')
        continue
    w1 = wordnet.synset('play.n.01')
    w2 = wordnet.synset(syn.name())
    print(w1.wup_similarity(w2)) 

output

['Hello Adam how are you?', 'I hope everything is going well.', 'Today is a good day, see you dude.']
Hello Adam how are you?
['Hello', 'Adam', 'how', 'are', 'you', '?']
0.42857142857142855
0.14285714285714285
no
0.2857142857142857
no
no

После прочтения документов я заметил, что ваш код w1 = wordnet.synset('play.n.01') выполняет сравнение имен существительных. Так что 'no' печатается не для существительных.

...