Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Обрубить окончания русских слов
Форумы портала PHP.SU » PHP » Регулярные выражения » Обрубить окончания русских слов

Страниц (1): [1]
 

1. dcc0 - 10 Августа, 2016 - 22:57:48 - перейти к сообщению
Есть поиск по базе mysql c помощью LIKE, хотелось бы обрубать окончания русских слов с гласными. Например, пользователь вводит слово "работа" или "работаю", в любом из этих случаев окончания обрубаются.
Пока только крутится такое: сделать транслитерацию ввода, поискать регуляркой символы в конце и отрубить.

Но не слишком ли затратно?
2. OrmaJever - 11 Августа, 2016 - 00:14:16 - перейти к сообщению
есть крутая штука sphinx называется, она умеет делать то что вам надо
3. Строитель - 11 Августа, 2016 - 01:01:19 - перейти к сообщению
OrmaJever пишет:
есть крутая штука sphinx называется, она умеет делать то что вам надо
Не знаю, будет ли актуальным мой ответ после вашего поста, но раз уж написал код, то опубликую
(Добавление)
dcc0 пишет:
сделать транслитерацию ввода, поискать регуляркой символы в конце и отрубить.
Набросал рекурсивную функцию, она удаляет все гласные в конце слова. Транслит не нужен
PHP:
скопировать код в буфер обмена
  1. function delLastLetter($text) {
  2.     $vowels = ['а','е','ё','и','о','у','ы','ю','я'];
  3.     $chars = preg_split('~~u', $text, -1, PREG_SPLIT_NO_EMPTY);
  4.     !in_array(end($chars), $vowels) ?: $bool = array_pop($chars);
  5.     $out = ($bool ? delLastLetter(join($chars)) : $text);
  6.     return $out;
  7. }
  8.  
  9. echo delLastLetter('Работать'); // Работать
  10. echo delLastLetter('Работаю');  // Работ
  11. echo delLastLetter('Работа');   // Работ
4. dcc0 - 11 Августа, 2016 - 10:11:37 - перейти к сообщению
OrmaJever, спасибо, присмотрюсь.

Строитель, благодарю, но я нарочно не просил готовых примеров, так как есть ряд сложностей.
Но все равно спасибо за код.
5. esterio - 11 Августа, 2016 - 12:04:56 - перейти к сообщению
OrmaJever верно подсказал, но если уж так хочется только PHP, то есть Стеммер Портера. Вот первая найденная реализация в гугле https://github[dot]com/NeonXP/Stemmer
6. dcc0 - 11 Августа, 2016 - 13:01:27 - перейти к сообщению
esterio, Sphinx - круто, на даже слишком. Тут не то, чтобы прям на php хочется.
Просто несколько вещей накладывается, хостинг - от hostinger со всякими лимитами (поэтому и был выбран простой LIKE), с другой стороны на этом хостинге немножко придется повозиться с кодировкой.
С третьей стороны - материала не так много и обновляться будет не часто.

Вот и думаю, какие неувязочки могут, если проверять длину слова и обрубать однозначно два символа в конце, например, если длина слова больше 7 символов. Жестоко, но на мой взгляд, достаточно экономно...
(Добавление)
esterio, да, спасибо, очень близко к тому, чего хотелось бы

 

Powered by ExBB FM 1.0 RC1