преобразование из лексемы в токен в Spacy - PullRequest
0 голосов
/ 27 мая 2018

Я использую фрагмент кода в разделе 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>  '

У кого-нибудь есть предложения по исправлениюЧто я сделал или другой способ изменить лексему на токен?Спасибо!

1 Ответ

0 голосов
/ 27 мая 2018

Вы должны создать Документ, чтобы получить токен, поскольку токен не владеет никакими данными - это просто представление.Итак, вы можете сделать что-то вроде:

doc = Doc(lex.vocab, words=[lex.orth_])
...