Spacy - пользовательские стоп-слова не работают - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь добавить пользовательский STOP_WORDS в spacy.Следующий код должен добавить пользовательский STOP_WORD "Bestellung" к стандартному набору STOP_WORDS.У меня проблема в том, что добавление работает, т.е. набор содержит «Bestellung» после добавления, но при тестировании пользовательского стоп-слова «Bestellung» с помощью .is_stop python возвращает FALSE.

Другой тест с STOP_WORD по умолчанию (т. Е. Он является стандартным в STOP_WORDS), «darunter» возвращает TRUE.Я не понимаю, потому что оба слова "Bestellung" и "darunter" находятся в одном наборе STOP_WORDS.

У кого-нибудь есть идеи, почему он так себя ведет?

Спасибо

import spacy
from spacy.lang.de.stop_words import STOP_WORDS

STOP_WORDS.add("Bestellung")
print(STOP_WORDS) #Printing STOP_WORDS proofs, that "Bestellung" is part of the Set "STOP_WORDS". Both tested words "darunter" and "Bestellung" are part of it.
nlp=spacy.load("de_core_news_sm")
print(nlp.vocab["Bestellung"].is_stop) # return: FALSE
print(nlp.vocab["darunter"].is_stop) # return: TRUE

Спасибо

1 Ответ

0 голосов
/ 09 октября 2018

Это связано с ошибкой в ​​предыдущих моделях spaCy.Хорошо работает в последнем спа-центре.Пример для английской модели:

>>> import spacy
>>> nlp = spacy.load('en')
>>> from spacy.lang.en.stop_words import STOP_WORDS
>>> STOP_WORDS.add("Bestellung")
>>> print(nlp.vocab["Bestellung"].is_stop)
True

Если вы хотите исправить это на существующем spaCy, вы можете использовать эту обходную функцию, которая изменяет атрибут is_stop для слов, присутствующих в STOP_WORDS.

nlp.vocab.add_flag(lambda s: s.lower() in spacy.lang.en.stop_words.STOP_WORDS, spacy.attrs.IS_STOP)

Это упоминается в этом выпуске spaCy на Github

...