Стемминг и подсчёт слов с одинаковой основой в тексте на 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». Имея символическую цену, он станет полезным приобретением для копирайтеров, сеошников, др.