Программируем этап стемминга текста
В этой статье я хочу поделиться готовыми функциями на Python для приведения грамматических форм списка слов к базовому виду (стемминг) в соответствии с ранее описанными рекомендациями.
Вспомним, что мы располагаем Pandas DataFrame, который содержит в качестве индексов сокращенные версии слов, полученные путем применения Snowball стеммера, а в качестве двух столбцов - базовую версию слова и его грамматические формы, разделенные символом ":". Вот, как выглядит эта таблица:
Прежде всего мы реализуем функцию поиска в данной таблице базовой формы для входного слова и его сокращенной версии. Отмечу, что в таблице искомое значение находится в столбце по названием "инфинитив":
Принцип ее функционирования такой же, как у алгоритма, указанного в этой статье. По сокращенной версии (stem_word) мы ищем строки таблицы dict_stem, значение индекса которых совпадает с ней. Затем в зависимости от того, сколько строк найдено, получим промежуточный объект в виде DataFrame или Series, в которых уже ищем исходную форму слова и в случае успеха получаем инфинитив из той же строки.
Теперь, реализуем более общую функцию, которая получает список слов, объект стеммера (в нашем случае SnowballStemmer), словарь и возвращает список базовых версий:
Сначала функция ищет совпадения в словаре, не меняя регистр первой буквы исходного слова. Обратите внимание, что SnowballStemmer переводит регистр на нижний, поэтому возникает необходимость в дополнительной проверке заглавной буквы и изменения ее вида при необходимости:
В случае неудачи функция пытается найти совпадения слова в нижнем регистре в словаре. Если и это не удается, то слово помещается в новый список в исходном виде.
Теперь продемонстрируем работу функции на практике. Зададим в качестве исходного списка слов следующие - 'Абхазии', 'здоровьем', 'черпал':
Таким образом, мы реализовали функционал, позволяющий получать на входе список слов в любых грамматических формах и на выходе - список их базовых форм. Делитесь в комментариях возможными улучшениями либо своими путями решения проблемы стемминга слов на русском языке.