Нормальные формы: что писать после ~


Рассказывает лингвист-разработчик Вероника Андриянова

Представим, что в вашего бота время от времени приходят вопросы о возврате товара. И решаете вы покрыть этот вопрос нехитрым паттерном.

q: * (~вернуть/~возвращать) *

Но сколько ни бейтесь, запрос возвращать — попадает в паттерн, а вернуть — нет! Может, дело в том, какую лемму мы указали после тильды(~)?

Леммой в лингвистике называют начальную, словарную форму слова. Лемматизатор — инструмент, приводящий слова из запроса к их начальной форме. По умолчанию в проекте выставляется лемматизатор mystem, также можно поменять его на udpipe через настройки классификатора. Наш пример как раз с udpipe.

Чтобы посмотреть на свой запрос глазами лемматизатора, мы используем метод $caila.markup("вернуть"). Логируем ответ и видим: "lemma": "вераться" 🥴

return

Гугл говорит, что это слово имеет значение “прятаться”. Интересно, конечно, но что делать-то?

Во-первых, лемматизаторов у нас несколько. Можно поменять на другой. Во-вторых, никто не мешает поместить ~вераться в тот же паттерн и отлавливать вернуть через него.

Ещё несколько забавных примеров лемматизации для вас:

  • снимок → снимка (спец., устар. мягкая резинка для удаления излишних карандашных линий или пятен)
  • курс → курса (древнелатышская историческая область, населённая куршами)
  • самаре → самар
  • перми → пер
  • и моё любимое: уничтожать → уничтогнуть 🥴🥴🥴

lemma

А есть один прям даже не забавный, а разбивающий сердечко пример, в этот раз от mystem:

  • полчаса, получасом, получасе → получасы
  • получаса, получасу → получас

Но всё же mystem как будто ближе по своим интерпретациям к современному русскому языку.

Изучите документацию JAICP
Статья про метод $caila.markup

Читать!