MyStem от Яндекса — морфология русского языкаТыкаюсь в разные инструменты для придумывания новых идей, и наткнулся на MyStem.
Это бинарник от Яндекса, который умеет одну вещь: разбирать русские слова по морфологии. Подаёшь на вход «бежал» — он отвечает «бежать, глагол, прошедшее время, единственное число, мужской род». Использовался внутри Яндекс.Поиска для нормализации запросов, потом выложили в публичный доступ.
Версия 3.1, под Linux/Mac/Windows.
Что умеет конкретноЛемматизация — сводит любую форму к начальной.«Бежал», «бежим», «бежавший» → «бежать». «Цветам», «цветов» → «цветок».
На практике: поисковик понимает, что «куплю кроссовки» и «купить кроссовок» — одно и то же.
POS-теггинг — часть речи.Метки:
S существительное,
A прилагательное,
V глагол,
ADV наречие,
PR предлог,
NUM числительное, плюс местоимения и служебные.
Грамматические признаки — падежи, числа, роды.MyStem отдаёт признаки одной строкой через запятые, в поле
gr. Лемма — в поле
lex.
Подаём фразу
доставка цветов на дом:
echo "доставка цветов на дом" | mystem -ni --format json
Реальный вывод MyStem 3.1:
{"analysis":[{"lex":"доставка","gr":"S,жен,неод=им,ед"}],"text":"доставка"}
{"analysis":[{"lex":"цветок","gr":"S,муж,неод=род,мн"},{"lex":"цвет","gr":"S,муж,неод=род,мн"}],"text":"цветов"}
{"analysis":[{"lex":"на","gr":"PR="},{"lex":"на","gr":"PART="}],"text":"на"}
{"analysis":[{"lex":"дом","gr":"S,муж,неод=вин,ед"},{"lex":"дом","gr":"S,муж,неод=им,ед"}],"text":"дом"}Расшифровка
gr-строки для слова
доставка (
S,жен,неод=им,ед):
-
S — существительное
-
жен — женский род
-
неод — неодушевлённое
-
= — разделитель постоянных и изменяемых признаков
-
им — именительный падеж
-
ед — единственное число
Если у слова несколько возможных разборов, MyStem отдаёт все. «Цветов» — родительный мн. от «цветок» (растение) или от «цвет» (расцветка). «На» — предлог или частица (как в «На, держи»). Самый вероятный вариант стоит первым.
Снятие омонимии.«Стекло» — глагол или существительное? «Печь» — готовить или мебель? MyStem смотрит соседние слова и выбирает наиболее вероятный вариант.
Где это применяют-
Поиск по сайту с пониманием форм — человек ищет «бежать», находит статьи со словами «бегу», «бежал», «бежавший»
-
Кластеризация семантики — собрал кучу запросов, привёл к леммам, объединил похожие
-
Анализ отзывов — выделить существительные и прилагательные, увидеть на чём акцентируют клиенты
-
Чат-боты — понимать ввод в любых формах
-
Генерация заголовков с правильным склонением — шаблон «купить X в Y» работает для любых X и Y
АльтернативыP.S. Но всё это нельзя делать на MyStem от Яндекса по лицензионному соглашению. Поэтому есть альтернативы:
-
pymorphy3 — на Python
-
phpMorphy — нативно на PHP
-
spaCy с ru-моделью — на Python