Spacy is_stop не идентифицирует стоп-слова? - PullRequest
0 голосов
/ 10 сентября 2018

Когда я использую SpaCy для определения стоп-слов, он не работает, если я использую en_core_web_lg корпус, но он работает, когда я использую en_core_web_sm. Это ошибка или я что-то не так делаю?

import spacy
nlp = spacy.load('en_core_web_lg')

doc = nlp(u'The cat ran over the hill and to my lap')

for word in doc:
    print(f' {word} | {word.is_stop}')

Результат:

 The | False
 cat | False
 ran | False
 over | False
 the | False
 hill | False
 and | False
 to | False
 my | False
 lap | False

Однако, когда я изменяю эту строку, чтобы использовать en_core_web_sm корпус, я получаю разные результаты:

nlp = spacy.load('en_core_web_sm')

 The | False
 cat | False
 ran | False
 over | True
 the | True
 hill | False
 and | True
 to | True
 my | True
 lap | False

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Проблема, с которой вы столкнулись - это документально подтвержденная ошибка . Предлагаемый обходной путь следующий:

import spacy
from spacy.lang.en.stop_words import STOP_WORDS

nlp = spacy.load('en_core_web_lg')
for word in STOP_WORDS:
    for w in (word, word[0].capitalize(), word.upper()):
        lex = nlp.vocab[w]
        lex.is_stop = True

doc = nlp(u'The cat ran over the hill and to my lap')

for word in doc:
    print('{} | {}'.format(word, word.is_stop))

выход

The | False
cat | False
ran | False
over | True
the | True
hill | False
and | True
to | True
my | True
lap | False
0 голосов
/ 10 сентября 2018

Попробуйте from spacy.lang.en.stop_words import STOP_WORDS, тогда вы можете явно проверить, есть ли слова в наборе

from spacy.lang.en.stop_words import STOP_WORDS
import spacy

nlp = spacy.load('en_core_web_lg')

doc = nlp(u'The cat ran over the hill and to my lap')

for word in doc:
    # Have to convert Token type to String, otherwise types won't match
    print(f' {word} | {str(word) in STOP_WORDS}')

Выводит следующее:

The | False
 cat | False
 ran | False
 over | True
 the | True
 hill | False
 and | True
 to | True
 my | True
 lap | False

Похоже, ошибка для меня. Тем не менее, этот подход также дает вам возможность добавлять слова в набор STOP_WORDS, если вам нужно

...