Вы получаете это сообщение об ошибке, когда similar_word
не является допустимым пространственным документом. Например. это минимальный воспроизводимый пример:
import spacy
nlp = spacy.load('en_core_web_md') # make sure to use larger model!
tokens = nlp(u'dog cat')
#similar_word = nlp(u'rabbit')
similar_word = nlp(u'')
for token in tokens:
print(token.text, similar_word.similarity(token))
Если вы измените значение ''
на 'rabbit'
, оно будет работать нормально. (Кошки, по-видимому, лишь немного похожи на кроликов, чем собаки!)
( ОБНОВЛЕНИЕ: Как вы указали, неизвестные слова также вызывают предупреждение; они будут действительными пространственными объектами, но не будут иметь никакого вектора слов.)
Таким образом, одним из исправлений будет проверка правильности similar_word
, включая наличие правильного вектора слов, перед вызовом similarity()
:
import spacy
nlp = spacy.load('en_core_web_md') # make sure to use larger model!
tokens = nlp(u'dog cat')
similar_word = nlp(u'')
if(similar_word and similar_word.vector_norm):
for token in tokens:
if(token and token.vector_norm):
print(token.text, similar_word.similarity(token))
Альтернативный подход:
Вы могли бы подавить конкретное предупреждение. Это W008. Я полагаю, что установка переменной окружения SPACY_WARNING_IGNORE=W008
перед запуском скрипта сделает это. (Не проверено.)
(см. исходный код )
Кстати, similarity()
может вызвать некоторую нагрузку на процессор, поэтому стоит сохранить в переменной, вместо того, чтобы вычислять ее три раза, как вы это делаете в настоящее время. (Некоторые люди могут утверждать, что это преждевременная оптимизация, но я думаю, что это также может сделать код более читабельным.)