Files
ave-cms/help/helpers/RussianStemmer.md
2026-07-27 12:58:44 +03:00

1.5 KiB

RussianStemmer — стемминг русских слов

App\Helpers\RussianStemmer — приводит русское слово к основе (алгоритм Портера) для нечёткого поиска: разные формы одного слова находят друг друга. Используется как инстанс.

use App\Helpers\RussianStemmer;

$stemmer = new RussianStemmer();

Методы

stemWord($word)

Вернуть основу слова.

$stemmer->stemWord('кресла');    // 'кресл'
$stemmer->stemWord('креслом');   // 'кресл'
$stemmer->stemWord('кресел');    // 'кресел' → приводится к общей основе с прочими формами

clearCache()

Очистить внутренний кеш вычисленных основ.


Рецепт

Индексация текста для поиска:

$stemmer = new RussianStemmer();
$stems = array();
foreach (preg_split('/\s+/u', mb_strtolower($text, 'UTF-8')) as $word) {
    $word = trim($word);
    if ($word !== '') { $stems[] = $stemmer->stemWord($word); }
}
// $stems сохраняем в поисковый индекс; запрос стеммим так же

Так «купить кресла» найдёт документ со словом «кресло». Для исправления раскладки — SearchText.