Мне нужно удалить все экземпляры 544 полнотекстовых стоп-слов из введенной пользователем строки поиска, а затем отформатировать ее для запуска полнотекстового поиска с частичным совпадением в логическом режиме.
ввод: "город Нью-Йорк", вывод: "+ йорк * + город *" (слово "новый" - это стоп-слово).
У меня есть ужасное решение, которое работает: разбить строку поиска на массив слов, найти каждое слово в массиве стоп-слов, сбросить их, если есть совпадение, взорвать оставшиеся слова и, наконец, запустить регулярное выражение, чтобы добавить форматирование логического режима. Должно быть более элегантное решение.
Мой вопрос состоит из 2 частей.
1) Как вы думаете, какой самый чистый способ сделать это?
2) Я решил часть проблемы с помощью огромного регулярного выражения, но это подняло другой вопрос.
РЕДАКТИРОВАТЬ: Это на самом деле работает. Мне стыдно сказать, что проблема с памятью (которая, как мне казалось, была моим регулярным выражением) возникла позже в коде из-за огромного количества совпадений после фильтрации стоп-слов.
$tmp = preg_replace('/(\b('.implode('|',$stopwords).')\b)+/','',$this->val);
$boolified = preg_replace('/([^\s]+)/','+$1*',$tmp);