|
|
|
| Хочу сделать поиск на сайте и вот нужно чтоб:
1. запрос разбивался на слова, если в конце слова есть пробелы или знаки препинания;
2. чтоб каждое полученное слово могло иметь в любом месте ошибку но база все равно его могла вытащить, типа:
запрос от пользователя: 'Чилавек поук'
а база должна выдать похожее, к примеру: 'Человек паук' | |
|
|
|
|
|
|
|
для: prodigy
(31.03.2011 в 18:42)
| | 1. Можно воспользоваться функцией preg_split() и регулярным выражением вида
2. Автоматического решения тут нет, придется искать алгоритм по ошибкам набора. В любом случае это здорово увеличивает нагрузку. | |
|
|
|
|
|
|
|
для: cheops
(31.03.2011 в 18:46)
| | >1. Можно воспользоваться функцией preg_split() и регулярным выражением вида
>
>2. Автоматического решения тут нет, придется искать алгоритм по ошибкам набора. В любом случае это здорово увеличивает нагрузку.
Согласен, второе требование даст большую нагрузку, и долго придумывать его, просто, бывает, юзер набирает STALKER вместо S.T.A.L.K.E.R. и база не видит это, в общем сделать хороший поиск на все случаи жизни очень сложно, как выход, можно приделать поиск от гугла, думаю, это единственный вариант. | |
|
|
|
|
|
|
|
для: prodigy
(31.03.2011 в 22:21)
| | Лучше помещать в журнал все сообщения пользователей на которые не было найдено результатов и наиболее популярные запросы регулярно рассматривать и вводить для них правила обработки. | |
|
|
|
|
|
|
|
для: cheops
(31.03.2011 в 22:26)
| | Спасибо за ответ, я немного усилил ваше решение:
$text = '{}[]\'"ёЁ`~:;|\/+=-_?7&*%()Вот, какие дела творятся,<br///> в;нашем[]мире !';
$text = trim(strip_tags($text));
$arr = preg_split("|[^_-\w\dАаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя]+|i", $text, -1, PREG_SPLIT_NO_EMPTY);
|
| |
|
|
|