Стемминг и подсчёт слов с одинаковой основой в тексте на PHP

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

Что такое Стемминг?Стемминг (от англ. stem — основа) — процесс нахождения основы слова для заданного исходного слова.

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

В предлагаемом решении используется Стеммер Портера — алгоритм стемминга, опубликованный Мартином Портером в 1980 году, который не использует баз основ слова, а последовательно применяет к исходному слову ряд правил для отсечения окончаний и суффиксов слов, основываясь на особенностях того или иного языка.

Бесплатно скачать PHP-скрипт «Стеммер Портера» можно по ссылкам:

  • stemmer_ru.php — Стеммер Портера для русского языка [скачать]
  • stemmer_en.php — Стеммер Портера для английского языка [скачать]

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

header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');

Использовать «Стеммер Портера» можно подключив php-скрипт, создав объект и вызвав его функции getWordBase($word), где $word— переменная, значением которой является исходное слово, для которого нужно найти основу слова, например:

$word = 'стемминга';
include_once('stemmer_ru.php'); // подключение PHP-скрипта
$ru = new Stemmer_RU; // создание объекта
$stem = $ru->getWordBase($word); // получение основы слова
echo $stem; // выведет — стемминг

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

$word = 'стемминга';
include_once('stemmer_ru.php');
include_once('stemmer_en.php');
$ru = new Stemmer_RU;
$en = new Stemmer_EN;
if( preg_match("'^[а-я]+$'iu", $word) ){
  $stem = $ru->getWordBase($word);
} elseif( preg_match("'^[a-z]+$'iu", $word) ){
  $stem = $en->getWordBase($word);
}

Для получения слов из текста я использую следующий код:

$words = preg_match_all("'\w{2,}'u", $in, $m) ? $m[0] : array();

В данном случае спецсимвол \wпредставляет собой любую цифру, буку или знак подчеркивания, а значение {2,}определяет количество вхождений от 0 и более. Подробней о регулярных выражениях читайте «Шпаргалка: регулярные выражения в PHP»

Стемминг и подсчёт слов с одинаковой основой в тексте

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

Стемминг и подсчёт слов с одинаковой основой в тексте
Стемминг и подсчёт слов с одинаковой основой в тексте

Скопировав PHP-скрипт на локальный сервер или сервер хостинг провайдера, вы получаете простой и удобный сервис анализа текстов.

Результат работы «Stemmer» — таблица, состоящая из двух частей: Stems (основы слов) и Words (словоформы).

В заголовке таблицы для Stems отображено количество словоформ, а для Wordколичество всех и уникальных слов.

В каждой строке таблицы отображаются основа и её словоформы. При этом для основы отображено общее количество словоформ, а для каждой словоформыколичество её упоминаний в тексте.

Примечание: если количество равно единице (1) оно не отображается.

На данный момент PHP-скрипт «Stemmer» можно
купить за символическую сумму — 10 рублей и более.

Описание товара | Покупка товара

И так, имея под рукой Стеммер Портера, нахождение основы слова не займёт у вас много времени и ресурсов. Следовательно, вы можете решать ряд смежных задач поиска и аналитики текстов. В качестве наглядного примера, предложен PHP-скрипт «Stemmer». Имея символическую цену, он станет полезным приобретением для копирайтеров, сеошников, др.