@Mercury13
Программист на «си с крестами» и не только

Что почитать об алгоритмах нормализации слов?

Хочу для слова вытащить все возможные начальные формы. То есть, для многострадальной «дочери генерала» должно быть «дочерить» (глагол), «дочерь» (существительное), «генерать» (глагол), «генерал» (существительное), ну и, так и быть, «дочь», если всё-таки в программе есть список «неправильных» слов.

1. Где про это прочитать?
2. Как лучше формализовать все эти правила в файлах данных (XML или подобных)?
3. Есть ли где-то корпус русских слов с указанием частей речи и всех форм?
  • Вопрос задан
  • 5043 просмотра
Решения вопроса 1
icelaba
@icelaba
Знаю и умею всё
Для русского языка есть несколько вариантов часть из них только получение базовой формы, часть выдает помимо базовой формы еще и какая это часть речи:
По пунктам от самого простого к сложному, и я не в курсе работают ли эти инструменты под windows, сам я использую osx и linux

1) Инструменты стеммеры - stemmer, обрезают слово выдирая из него по некоторым правилам то что они принимают за - окончания, суффиксы, приставки.
Лично мне очень нравится стеммер для русского языка из пакета https://github.com/NaturalNode/natural
Тут простой код для понимания как работает стеммер https://github.com/NaturalNode/natural/blob/master...
Достоинства стеммеров: очень быстрые, подходят для предварительного анализа в 100% случаев
Недостатки: базовая словоформа периодами весьма далека от реальной базовой словоформы

==========================================================
2) использовать aspell - линуксовый пакет для проверки орфографии
пример echo ехала криса на велосипеде | aspell -a -d russian --sug-mode=ultra
вывод:

+ ехать
& криса 13 6: киса, риса, ириса, краса
*
+ велосипед

Достоинства: большой набор словарей, можно добавлять свои, есть suggestion mode - выдает похожие слова на слова написанные с ошибкой и/или отсутствующие в словаре см выше & криса 13 6: киса, риса, ириса, краса
Недостатки: медленный, не говорит какая часть речи

======================================================
3) Лучший в номинации TreeTagger www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/#Linux

пример: echo 'баба сеяла горох' | cmd/tree-tagger-russian
вывод:
баба Ncfsny
сеяла Vmis-sfa-e
горох Ncmsan

разшифровка записей вида Ncfsny тут corpus.leeds.ac.uk/mocky/msd-ru.html
то есть помимо того какая это часть речи и базовой словоформы эта штука еще и выдает кучу дополнительной информации - от падежей и до ....
Достоинства: великолепен!, определяет часть речи даже если не имеет слова в словаре
Недостатки: части речи то он определяет а вот с базовой словоформой невсегда, приходится использовать в паре с aspell или стеммером. Самый медленный.

========================================================
Есть еще какие то продукты от яндекса https://company.yandex.ru/technologies/mystem/
я не пользовался.

Удачи!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы