Стемминг ключевых слов
Оригинальное название: keyword stemming
Коротко
Приведение разных форм слова к общей основе путём отсечения окончаний и суффиксов, чтобы поиск находил «ремонт», «ремонта» и «ремонтом» по одному запросу.
Что такое «Стемминг ключевых слов»
Первые поисковые системы искали точное совпадение строк, и страница про «ремонт холодильника» не находилась по запросу «ремонт холодильников». Стемминг решил эту проблему для языков с окончаниями. Самый известный алгоритм для английского предложил Мартин Портер в 1980 году, а его развитие — набор стеммеров Snowball, где есть вариант и для русского.
Стеммер работает по правилам и словаря не знает: он просто отрезает типичные окончания. Поэтому у слов с чередованием звуков основы могут не совпасть, а у разных по смыслу слов — совпасть случайно. Более точный подход — лемматизация, приведение слова к словарной форме с учётом морфологии. Яндекс с первых версий делал ставку именно на морфологический анализ русского языка.
Пример на Python
from nltk.stem.snowball import SnowballStemmer
stemmer = SnowballStemmer("russian")
for word in ["ремонт", "ремонта", "ремонтом", "окна", "окнами"]:
print(word, "→", stemmer.stem(word))
Три формы слова «ремонт» сводятся к основе «ремонт», а «окна» и «окнами» — к «окн». Основа «окн» не обязана быть настоящим словом: стеммеру важно лишь, чтобы разные формы дали одинаковый результат.
Где встречается на практике
- Поиск по сайту. В модуле поиска 1С-Битрикса есть настройка использования морфологии. Стандартный поиск WordPress ищет по вхождению подстроки, поэтому по запросу «окно» не найдёт «окна» — для этого ставят поисковые плагины или внешние движки.
- Работа с семантикой: при кластеризации запросов словоформы склеивают, чтобы не считать «ремонт окна» и «ремонт окон» разными темами.
- Тексты страниц: благодаря морфологии поисковиков не нужно вставлять каждую форму запроса. Попытка уложить в текст все варианты ведёт к переспаму.

