Вы не упускаете ни одного очевидного решения, чтобы взглянуть на леммы в простом стиле.spacy-lookup говорит прямо в README (ближе к концу раздела об использовании): «spacy-lookup
заботится только о тексте токена» *
Вам нужно изменить spacy-lookup, чтобы он делал то, что выхотите, около здесь :
matches = self.keyword_processor.extract_keywords(doc.text, span_info=True)
Вы могли бы потенциально изменить doc.text
на что-то еще здесь (например, ' '.join([token.lemma_ for token in doc])
), но тогда у вас возникнут проблемы, потому что spacy-lookup полагается насмещения символов в тексте документа для обработки диапазонов сущностей, поэтому вам придется переделать обнаружение / объединение диапазонов сущностей, чтобы он использовал смещения токенов вместо смещений символов для выравнивания сущностей с исходным текстом документа.(Это было бы выполнимо, но немного хлопотно.)
Если все, что вам нужно, это поиск сущностей, вы можете использовать spacy (или NLTK или что-то еще), чтобы сгенерировать леммы, а затем использовать flashtext самостоятельно длянайти сущности, полностью пропуская поиск.Если вам не нужен дальнейший анализ пространств, то это будет самый простой вариант.
Другие примечания:
spacy-lookup, похоже, имеет вариант для case- нечувствительный поиск (через опцию, переданную во flashtext)
, если вы хотите использовать spacy и если лемматизация spacy достаточно хороша для того, что вам нужно (проверьте внимательно!), в этом нет необходимостивместо этого использовать NLTK;Вы можете создать более быстрый конвейер, который отключит ненужные компоненты:
nlp = spacy.load('en', disable=['tagger', 'parser', 'ner'])