Оптимизация извлечения однословных форм (лемматизация) в пространстве - PullRequest
0 голосов
/ 17 июня 2020

Я хочу сократить слово до его базовой формы без использования контекстной информации. Я попробовал spacy, и для этого требуется запустить nlp, чтобы получить базовую форму одного слова, но это приводит к увеличению времени выполнения.

Я просмотрел этот пост, в котором отключение компонентов синтаксического анализатора и конвейера NER в некоторой степени ускоряет время выполнения, но я просто хочу, чтобы процесс напрямую просматривал базу данных word и его лемму форма (в основном базовая форма слова без учета контекстной информации

my_list = ["doing", "done", "did", "do"]
for my_word in my_list:
    doc = nlp(my_word, disable=['parser', 'ner'])
    for w in doc:
        print("my_word {}, base_form {}".format(w, w.lemma_))

желаемый результат

my_word doing, base_form do
my_word done, base_form do
my_word did, base_form do
my_word do, base_form do

Примечание: я также пробовал spacy.lemmatizer, но это не дает ожидаемых результатов и требуемый pos в качестве дополнительных инструментов.

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Таблицы поиска Spacy доступны в этом репозитории:

https://github.com/explosion/spacy-lookups-data

Здесь вы можете прочитать документацию и проверить примеры, которые могут вам помочь.

0 голосов
/ 17 июня 2020

Если вам просто нужны леммы из таблицы поиска, вы можете установить таблицы поиска и инициализировать очень базовый c конвейер, который включает только токенизатор. Если таблицы поиска установлены, token.lemma_ будет искать форму в таблице.

Установите таблицы поиска (которые в противном случае сохраняются только в предоставленных моделях и не включены в основной пакет spacy, чтобы сэкономить место):

pip install spacy[lookups]

Токенизация и лемматизация:

import spacy

nlp = spacy.blank("en")
assert nlp("doing")[0].lemma_ == "do"
assert nlp("done")[0].lemma_ == "do"
...