Я использую фрагмент кода в разделе 3. Интеграция Word в векторы из этого учебного пособия по НЛП .Он использует лексемы Spacy для вычисления слов, наиболее похожих на любое слово, которое вы ему даете - я использую его, чтобы попытаться найти ближайшие синонимы к данному слову.Однако, если вы замените яблоко словом «look», вы получите много связанных слов, но не синонимов (примеры: pretty, there, over и т. Д.).Я думал о том, чтобы изменить код, чтобы он также фильтровал по части речи, чтобы я мог просто получать глаголы в выводе и мог бы пойти дальше.Для этого мне нужно использовать токены, чтобы я мог использовать token.pos_, так как эта функция недоступна для лексем.Кто-нибудь знает способ взять вывод (список под названием «другие» в коде) и изменить его с лексемы на токен?Я перечитывал информационный документ spacy для лексем здесь , но мне не удалось найти ничего о преобразовании.
Я также попытался добавить раздел кода в концекод другого человека:
from numpy import dot
from numpy.linalg import norm
import spacy
from spacy.lang.en import English
nlp = English()
parser = spacy.load('en_core_web_md')
my_word = u'calm'
#Generate word vector of the word - apple
apple = parser.vocab[my_word]
#Cosine similarity function
cosine = lambda v1, v2: dot(v1, v2) / (norm(v1) * norm(v2))
others = list({w for w in parser.vocab if w.has_vector and w.orth_.islower()
and w.lower_ != my_word})
print("done listing")
# sort by similarity score
others.sort(key=lambda w: cosine(w.vector, apple.vector))
others.reverse()
for word in others[:10]:
print(word.orth_)
Часть, которую я добавил:
b = ""
for word in others[:10]:
a = str(word) + ' '
b += a
doc = nlp(b)
print(doc)
token = doc[0]
counter = 1
while counter < 50:
token += doc[counter]
counter += 1
print(token)
Это ошибка вывода:
'token += doc[counter]
TypeError: unsupported operand type(s) for +=: 'spacy.tokens.token.Token' and 'spacy.tokens.token.Token'
<spacy.lexeme.Lexeme object at 0x000002920ABFAA68> <spacy.lexeme.Lexeme object at 0x000002920BD56EE8> '
У кого-нибудь есть предложения по исправлениюЧто я сделал или другой способ изменить лексему на токен?Спасибо!