mirror of
https://github.com/avecms/AVE.cms.git
synced 2026-08-01 00:45:44 +00:00
1.5 KiB
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.