Алгоритм стемминга

Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога hozyindachi.ru о продвижении и доработке сайтов.

Алгоритм стемминга

Стемминг — это алгоритм, который отсекает у слова окончание и суффиксы, оставляя приблизительную основу. «Крышами», «крышу», «крыши» превращаются в «крыш», после чего поисковая система считает эти формы одним словом. Задача понятная: пользователь ищет «купить крышу», а на странице написано «крыши от производителя», и без нормализации совпадения не будет. В SEO с 2005 года я наблюдал, как из непонимания этого механизма рождались тексты, где в одном абзаце подряд шли «пластиковые окна», «пластиковых окон», «пластиковым окнам» — автор честно вписывал все словоформы, не зная, что алгоритм давно свёл их к одной основе.

Как работает стемминг: отсечение по правилам

Стеммер не знает языка. Он работает по списку правил вида «если слово оканчивается на -ами, отбрось -ами», «если на -ого, отбрось -ого». Правила применяются последовательно, пока не останется то, что алгоритм считает основой. Никаких словарей, никакого понимания частей речи — только строковые операции.

Для русского языка классический вариант — стеммер Портера, адаптированный под нашу морфологию. Он проходит слово в несколько этапов: сначала снимает деепричастные и причастные суффиксы, потом возвратный постфикс, потом падежные окончания, потом суффиксы прилагательных, в конце убирает мягкий знак.

Исходное слово Результат стемминга Комментарий
крыша, крыши, крышами крыш Корректно, формы объединены
продвижение, продвижения продвижен Основа не является настоящим словом
окно, окна, окнами окн Корректно
кровля, кровельный кровл / кровельн Родственные слова не объединились
идти, шёл, шли ид / шёл / шл Супплетивные формы алгоритм не связывает

Последние две строки таблицы показывают главное ограничение метода. Стеммер не понимает, что «шёл» — форма глагола «идти». Он видит только буквы на конце строки.

Лемматизация: другой подход к той же задаче

Лемматизация решает ту же проблему, но словарным путём. Алгоритм определяет, какой частью речи является слово в данном контексте, находит его в морфологическом словаре и возвращает начальную форму — лемму. Для существительного это именительный падеж единственного числа, для глагола — инфинитив.

Разница видна на примерах, где буквенные правила бессильны:

  • Омонимия форм. «Стали» — это и форма глагола «стать», и родительный падеж существительного «сталь». Стеммер обрежет одинаково, лемматизатор по контексту различит.
  • Нерегулярные формы. «Человек» и «люди», «ребёнок» и «дети» — словарь связывает их, правила отсечения нет.
  • Короткие слова. «Мыло» стеммер может урезать до «мыл», что совпадёт с формой глагола «мыть».
  • Точность выдачи. Лемматизация даёт меньше ложных объединений и потому лучше подходит для задач, где важна точность смысла.
Критерий Стемминг Лемматизация
Основа метода Правила отсечения окончаний Морфологический словарь
Скорость Очень высокая Ниже, требует словаря в памяти
Результат Псевдооснова, часто не слово Настоящая словарная форма
Учёт контекста Нет Да, определяется часть речи
Ошибки Лишнее и недостаточное отсечение Проблемы с новыми словами и именами
Типичное применение Поиск внутри сайта, быстрая индексация Крупные поисковые системы, аналитика текста

Почему для русского языка стемминг грубее

Русский — язык флективный, с богатой морфологией. У существительного шесть падежей и два числа, у прилагательного добавляются род и краткая форма, у глагола — вид, время, лицо, число, наклонение, причастия и деепричастия. Одно слово порождает десятки форм, а границы между основой и окончанием подвижны.

Добавьте сюда чередования в корне: «рука — ручной», «нога — ножной», «друг — друзья», беглые гласные «отец — отца», «сон — сна». Никакое правило отсечения хвоста не свяжет «рука» и «ручной» — для этого нужен словарь.

Для английского ситуация проще: там окончаний мало, и стеммера чаще достаточно. Именно поэтому подходы, отлично работающие в англоязычных инструментах, при переносе на русский текст дают заметно больше ошибок.

Ошибки стеммера делятся на два типа. Избыточное отсечение — когда алгоритм срезал слишком много и объединил разные по смыслу слова. Недостаточное отсечение — когда формы одного слова не свелись к общей основе и остались для системы разными.

Практический разбор: что это меняет для текстов на сайте

Теперь главное — как знание об этих алгоритмах меняет работу с контентом. Разберу на конкретном сценарии.

Допустим, вы продвигаете страницу услуги и собрали такие запросы: «ремонт кровли», «ремонт кровли цена», «ремонт кровли в Москве», «ремонта кровли», «отремонтировать кровлю». Классический подход десятилетней давности — вписать каждую формулировку дословно, чтобы «попасть» во все варианты.

Шаг 1. Приведите запросы к основам. После нормализации все пять запросов сводятся примерно к набору: ремонт, кровл, цен, москв. Разные строчки в таблице оказываются одной и той же лексической группой.

Шаг 2. Уберите дубли из ТЗ. Если в задании на текст стоят «ремонт кровли — 5 раз» и «ремонта кровли — 3 раза», это одно требование на восемь вхождений одной основы, а не два разных.

Шаг 3. Пишите естественными формами. Употребляйте ту форму, которой требует предложение. «Мы делаем ремонт кровли», «стоимость ремонта кровли», «после ремонта кровли» — для алгоритма это одинаковые сигналы, а для читателя — нормальный русский текст.

Шаг 4. Проверьте на неудобные конструкции. Фразы вроде «ремонт кровли Москва недорого» существуют только в поисковой строке. В тексте их нужно разворачивать: «ремонт кровли в Москве по цене ниже средней по рынку». Основы совпадут, а читаемость сохранится.

Шаг 5. Работайте с родственными словами отдельно. «Кровля», «кровельный», «кровельщик» имеют разные основы после стемминга. Их стоит употребить осознанно — не ради количества, а потому что они расширяют охват связанных запросов.

Где стемминг применяется на практике

Понимание области применения помогает не переносить выводы туда, где они не работают.

Область Что применяется Почему
Поиск по каталогу интернет-магазина Чаще стемминг Скорость важнее точности, словарь тяжёлый
Большие поисковые системы Лемматизация с языковыми моделями Нужна точность и понимание контекста
Подсказки в строке поиска Стемминг плюс префиксный поиск Отклик за миллисекунды
Кластеризация семантического ядра Лемматизация Нужны корректные группы без ложных склеек
Проверка плотности вхождений Обычно лемматизация Считать нужно словоформы одного слова

Отдельно отмечу поиск внутри сайта. Если у вас интернет-магазин и встроенный поиск не находит товар при запросе во множественном числе — почти наверняка нормализация вообще не настроена. Это типичная задача на доработку сайта, и решается она подключением морфологического модуля к поисковому индексу. Потери от такого бага измеряются напрямую: посетитель не нашёл товар и ушёл.

Чего делать не стоит

  • Вписывать все словоформы подряд. «Купить окна, купить окон, купить окнам» — алгоритм видит одну основу трижды, читатель видит спам.
  • Оставлять в тексте запросы в поисковом виде. «Двери межкомнатные купить Москва» в заголовке H1 не даёт преимущества, но портит впечатление.
  • Считать вхождения строковым поиском. Проверка «сколько раз встречается точная фраза» игнорирует падежные формы и даёт заниженный результат.
  • Гнаться за процентом плотности. Показатель из середины двухтысячных. Современные алгоритмы оценивают полноту раскрытия темы, а не долю ключа.
  • Путать однокоренные слова с формами. «Кровля» и «кровельщик» — разные лексемы, они не взаимозаменяемы и не покрывают друг друга.
  • Разбивать ключ знаками препинания. «Ремонт. Кровли» разрывает словосочетание, и близость слов теряется.
  • Игнорировать синонимы. Нормализация форм не заменяет синонимический ряд: «кровля» и «крыша» для алгоритма разные слова, обе группы нужно раскрывать.

Как это влияет на структуру семантики

Ещё одно практическое следствие: запросы, отличающиеся только формой слова, нельзя разносить по разным страницам. «Ремонт кровли» и «ремонта кровли» — не два разных интента, а одна группа. Попытка сделать под них отдельные посадочные приводит к внутренней конкуренции, когда две страницы борются за одну позицию и обе проседают.

Правильная логика группировки: сначала нормализуем формы, потом смотрим на пересечение выдачи по запросам, потом принимаем решение о посадочной. Если по двум запросам выдача совпадает более чем наполовину — это одна страница, независимо от того, как запросы выглядят в таблице.

При аудите сайта я регулярно нахожу проекты, где под словоформы одного запроса созданы десятки почти одинаковых страниц. Это наследие старых подходов, и оно требует склейки, а не развития.

Частые вопросы

Нужно ли вписывать в текст все падежные формы ключевого запроса? Нет. Поисковые системы приводят слова к нормальной форме, поэтому «окна», «окон» и «окнами» для них одно слово. Пишите ту форму, которую требует предложение.

Стемминг или лемматизация используется в Яндексе и Google? Обе системы работают на полноценной морфологии со словарями, то есть ближе к лемматизации, плюс поверх этого — нейросетевые модели, которые учитывают смысл и контекст. Чистый стемминг сегодня встречается в основном во внутренних поисках сайтов и в утилитах обработки текста.

Влияет ли порядок слов в ключе на ранжирование? Влияет, но слабее, чем раньше. Нормализация снимает вопрос формы, а близость слов друг к другу и порядок остаются учитываемым фактором. Естественное словосочетание лучше искусственно перевёрнутого.

Как посчитать, сколько раз ключ реально встречается в тексте? Считать нужно по основам, а не по точным строкам. Подойдут инструменты анализа текста с морфологией: они соберут все словоформы в одну группу. Ручной поиск по точному совпадению всегда занижает результат.

Стоит ли использовать редкие словоформы ради охвата? Нет смысла. Форма нормализуется, а неуклюжая конструкция ухудшает восприятие и поведенческие показатели. Расширять охват нужно синонимами и смежными темами — этому принципу я учу и на обучении SEO, потому что он экономит массу времени при написании текстов.

Чеклист

  • Приведите собранные запросы к нормальной форме перед группировкой — часть строк окажется дублями.
  • Уберите из технического задания на текст требования вписать разные падежные формы одного слова.
  • Проверьте посадочные страницы: нет ли отдельных URL под словоформы одного запроса.
  • Замените в заголовках поисковые конструкции на нормальные фразы с теми же основами.
  • Добавьте в текст однокоренные слова и синонимы — они расширяют охват, в отличие от словоформ.
  • Считайте вхождения инструментом с морфологией, а не поиском по точной строке.
  • Проверьте внутренний поиск сайта: найдите товар запросом во множественном числе и в косвенном падеже.
  • Если внутренний поиск не понимает словоформы, поставьте задачу на подключение морфологии.
  • Перечитайте текст вслух: если фраза звучит неестественно из-за ключа, перепишите её.

Если нужно заказать SEO-продвижение — помогу вывести сайт в топ Яндекса и удержать позиции.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Нажимая «оставить комментарий» вы принимаетеправила конфиденциальности 

Прокрутить вверх