LemminflectМодуль Python для английской лемматизации и перегиба.
Lemminflect использует словарный подход для лемматизации английских слов и добавления их в формы, указанные пользователем универсальные зависимости или тег Penn Treebank. Библиотека работает со словами вне вокабуляции (OOV), применяя методы нейронной сети для классификации форм слов и выбора соответствующих правил морфинга.
Система действует как автономный модуль или как расширение в систему Spacy NLP.
Правила словаря и морфологии получены из специализированной лексики NIH, которая содержит обширную наборную информацию о английских формах слов.
Более упрощенная система перегиба доступна как Pyinflect. Lemminflect был создан для решения некоторых недостатков этого проекта и добавления функций, таких как ...
Для последней документации см. Readthedocs .
Точность Lemminflect и нескольких других популярных утилит NLP была протестирована с использованием автоматически сгенерированной базы данных перегиба (AGID) в качестве базовой линии. Это не «золотой» стандартный набор данных, но он имеет обширный список лемм и их соответствующие перегибы и, по -видимому, является общим «хорошим» набором для тестирования. Каждое перегиб был легматизирован тестовым программным обеспечением, а затем сравнивался с исходным значением в корпусе. Тест включал 119 194 различных слов.
| Package | Verb | Noun | ADJ/ADV | Overall | Speed |
|-----------------------------------------------------------------------------|
| LemmInflect 0.2.3 | 96.1% | 95.4% | 93.9% | 95.6% | 42.0 uS |
| Stanza 1.5.0 + CoreNLP 4.5.4 | 94.0% | 96.4% | 93.1% | 95.5% | 30.0 us |
| spaCy 3.5.0 | 79.5% | 88.9% | 60.5% | 84.7% | 393.0 uS |
| NLTK 3.8.1 | 53.3% | 52.2% | 53.3% | 52.6% | 12.0 uS |
|-----------------------------------------------------------------------------|
Скорость находится на микросекундах на лемму и проводилась на процессоре I9-7940X. Обратите внимание, что, поскольку Stanza вызывает вызовы в программное обеспечение Java Corenlp, все тестовые примеры 120 тыс. Были сгруппированы в один вызов. Для Spacy все компоненты трубопровода были отключены, кроме Lemmatizer. Высокое время на лемму, вероятно, является отражением общих накладных расходов архитектуры трубопровода.
Единственным внешним требованием для запуска Lemminflect является numpy , который используется для математики матрицы, которая управляет нейронными сетями. Эти сети относительно невелики и не требуют значительной мощности процессора для работы.
Чтобы установить do ..
pip3 install lemminflect
Проект был построен и протестирован под Python 3 и Ubuntu, но должен работать на любой системе Linux, Windows, Mac и т. Д.. Он не проверен под Python 2, но может функционировать в этой среде с минимальными или без изменений.
Кодовая база также включает в себя библиотечные функции и сценарии для создания различных файлов данных и нейронных сетей. Это включает в себя такие вещи, как ...
Ничто из этого не требуется для работы во времени. Однако, если вы хотите изменить систему, см. Документацию для получения дополнительной информации.
Для того, чтобы легматизировать слово, используйте метод getLemma() . Это требует слова и универсального тега зависимостей и возвращает леммы как список возможных написаний. Сначала используется словарная система, и, если не найдена лемма, используется система правил.
> from lemminflect import getLemma
getLemma('watches', upos='VERB')
('watch',)
Чтобы переполнить слова, используйте метод getInflection . Это берет лемму и метку Penn Treebank и возвращает кортеж из конкретного перегиба (ы), связанных с этим тегом. Сравнение выше, словарь используется сначала, а затем при необходимости применяются правила перегиба.
> from lemminflect import getInflection
> getInflection('watch', tag='VBD')
('watched',)
> getInflection('xxwatch', tag='VBD')
('xxwatched',)
Библиотека предоставляет функции более низкого уровня для доступа к словарям и правилам OOV напрямую. Подробное описание см. Lemmatizer или перегиб.
Чтобы использовать в качестве расширения, вам нужна Spacy версия 2.0 или более поздней версии. Версии 1.9 и ранее не поддерживают методы расширения, используемые здесь.
Чтобы настроить расширение, сначала импортируйте lemminflect . Это создаст новые методы lemma и inflect для каждого Token Spacy. Методы работают аналогично методам, описанным выше, за исключением того, что строка возвращается, содержащая наиболее распространенное правописание, а не кортеж.
> import spacy
> import lemminflect
> nlp = spacy.load('en_core_web_sm')
> doc = nlp('I am testing this example.')
> doc[2]._.lemma()
test
> doc[4]._.inflect('NNS')
examples
Если вы найдете ошибку, сообщите об этом в списке проблем GitHub. Однако имейте в виду, что когда входит в возврат правильного перегиба, существует ряд различных типов проблем, которые могут возникнуть. Некоторые из них не легко исправляются. Проблемы с перелаженными формами включают ...
Одна общая проблема заключается в том, что некоторые формы глагола «быть» не полностью указаны тегом Treekbank. Например, Be/VBD перегибает к "было" или "было", а BE/VBP перегибает к "AM", либо " - это". Чтобы устранить эти формы, необходимо проверить другие слова в предложении. В настоящее время Lemminflect не включает эту функциональность.