Добавить правила в лемматизацию Spacy - PullRequest
0 голосов
/ 05 августа 2020

Я использую лемматизацию Spacy для предварительной обработки текстов.

doc = 'ups'
for i in nlp(doc):
print(i.lemma_)
>> up

Я понимаю, почему spacy удаляет 's', но для меня важно, что в этом случае он этого не сделает. Есть ли способ добавить определенные c правила в spacy или мне нужно использовать операторы If вне процесса (чего я не хочу делать)

1 Ответ

1 голос
/ 05 августа 2020

В зависимости от того, есть ли у вас теггер, вы можете настроить исключения лемматизатора на основе правил или таблицу поиска:

import spacy

# original
nlp = spacy.load("en_core_web_sm", disable=["parser", "ner"])
# may be "up" or "ups" depending on exact version of spacy/model because it
# depends on the POS tag
assert nlp("ups")[0].lemma_ in ("ups", "up")

# 1. Exception for rule-based lemmatizer (with tagger)

# reload to start with a clean lemma cache
nlp = spacy.load("en_core_web_sm", disable=["parser", "ner"])
# add an exception for "ups" as with POS NOUN or VERB
nlp.vocab.lookups.get_table("lemma_exc")["noun"]["ups"] = ["ups"]
nlp.vocab.lookups.get_table("lemma_exc")["verb"]["ups"] = ["ups"]
assert nlp("ups")[0].lemma_ == "ups"

# 2. New entry for lookup lemmatizer (without tagger)

nlp = spacy.load("en_core_web_sm", disable=["tagger", "parser", "ner"])
nlp.vocab.lookups.get_table("lemma_lookup")["ups"] = "ups"
assert nlp("ups")[0].lemma_ == "ups"

Если вы обрабатываете слова изолированно, теггер не будет очень надежный (вы можете получить NOUN, PROPN или VERB для чего-то вроде ups), поэтому, возможно, будет проще настроить лемматизатор поиска. Качество лемм, основанных на правилах, в целом выше, но для получения разумных результатов вам нужны как минимум полные фразы, предпочтительно полные предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...