Необходимо получить базовую форму слова 'КРАСНЫХ'. Так как название товара 'Букет из красных роз', а пользователь ввел 'заказать красные розы'. При индексации названия товара, оно разбивается на слова. Слова приводятся к базовой форме и вставляются в отдельную таблицу в бд (`слово`,'id_товара`,`вес`). Получаю базовую форму с помощью метода phpMorphy lemmatize(). PHP: $words = $this->morphy->lemmatize('КРАСНЫХ'); Но возвращается массив: Код (Text): Array ( [0] => КРАСНЫХ [1] => КРАСНЫЙ [2] => КРАСНОЕ ) Нужное мне слово под индексом "1": красный. Так как я хочу все слова в названии товара привести в ед.ч, им.падеж, муж.род. Ладно, подумал я, кастую форму с заданием нужных мне граммем ('ЕД', 'ИМ', 'МР'). PHP: $this->morphy->castFormByGramInfo('КРАСНЫХ','П',array('ЕД','ИМ','МР'),TRUE); Где 'П' - прилагательное, третий параметр - массив граммем, четвертый - указываем, что хотим получить только преобразованное слово. Выдает вот это: Код (Text): Array ( [0] => КРАСНЫЙ [1] => КРАСНЕЙШИЙ ) В документации нет константы (граммемы) для приведения прилагательного к положительной степени сравнения, к превосходной и сравнительной - есть. Я выкрутился так (см. ниже). PHP: $words = $this->morphy->lemmatize('КРАСНЫХ'); // проверяем, получено ли несколько базовых форм слова if (count($words) > 1) { // проверяем является ли слово прилагательным $isAdj = in_array('П',$this->morphy->getPartOfSpeech($words[0])); if ($isAdj) { // получаем слово в ед.числе, имен.падеже, муж.роде $castedWords = $this->morphy->castFormByGramInfo($words[0],'П',array('ЕД','ИМ','МР'),false); // пробегаем по массиву, в котором прилагательное в разных степенях сравнения foreach ($castedWords as $word) { // если отсутствует граммема, 'ПРЕВ' - превосходная степень, // то показываем это слово if (!in_array('ПРЕВ',$word['grammems'])) { echo $word['form']; } } } } else { echo $words[0]; } Вообщем, подскажите, может есть другой способ индексации слов/приведения слов к начальной форме или этот способ никуда не годится?
Но интеллектуальный поиск на сайте это же один из главных вещей для каждого магазина. И это же относится к задачам backend-разработчика (php, java, python).
а, вот ты что городишь надо просто заюзать поиск с поддержкой словоформ. например https://en.wikipedia.org/wiki/Sphinx_(search_engine) или https://en.wikipedia.org/wiki/Elasticsearch на крайний случай можнов сегда прицепить внешний поисковик https://site.yandex.ru/ или https://cse.google.ru/cse/ вперёд