| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > Поиск похожих строк в базе MySQL |
| Автор: Digit 1.9.2009, 20:25 |
| Доброго времени суток! Имеется база данных MySQL, в которой хранятся строки. В самой базе 2 таблицы: первая (основная) для постоянного хранения строк, вторая для хранения строк, которые добавили посетители сайта для модерации. Нужно: выделять модератору новые строки (из второй таблицы), которые имеют "похожие" строки в основной (первой) таблице Пробовал решить задачу вычисляя расстояние левенштейна между каждой строкой из основной таблици и кажной из второй, все срубается серваком довольно быстро. Подскажите как решить эту задачку. Возможна реорганизация базы. |
| Автор: bars80080 1.9.2009, 22:11 |
| во-первых, имеются ввиду слова или целые фразы а во-вторых, в чём схожесть строк? банальное расхождение в наборе символов /не те символы, да не на тех позициях/ или всё же смысловое расхождение? допустим разные окончания? |
| Автор: IZ@TOP 1.9.2009, 23:47 |
| http://habrahabr.ru/blogs/sphinx/61807/? |
| Автор: Digit 2.9.2009, 09:54 |
| IZ@TOP, спасибо за статью, но на мой взгляд там не выйдет с помощью этого поиска найти id строки в основной базе "похожей" на новую строчку. |
| Автор: IZ@TOP 2.9.2009, 10:49 | ||
Все зависит от того, что ты имеешь ввиду под "похожестью". |
| Автор: Simpliest 2.9.2009, 14:21 |
| http://ua.php.net/manual/en/function.soundex.php и там же на странице ниже еще пара функций |
| Автор: IZ@TOP 2.9.2009, 15:24 |
| Как на счет этого http://ua.php.net/manual/en/function.pspell-suggest.php ? Вообще я даже на sphinxsearch видел обсуждение поиска с использованием soundex. Думаю, если погуглить в нужном направлении, можно что-то интересное найти. Хотя я до сих пор не понимаю, что конкретно нужно автору |
| Автор: Digit 2.9.2009, 23:35 |
| Вот пример "похожих" строк: 1) "Я счастлива! У меня есть я" = "Я счастлив, у меня есть я" (разные окончания + разная разбивка на предложения) 2) "Не бойтесь совершенства.\n Оно вам не грозит.\n //Дали" = "Не бойтесь совершенства. Оно вам не грозит.\n Дали ©" (по разному стоят переносы строк + разные символы) 3) "Не бойся своих желаний! Бойся моих!" = "Не бойся желаний своих! Бойся моих!" (перестановка слов) Нужно вылавливать "похожие" строки с различними вариантами смешения примеров 1, 2 и 3. soundex и metaphone не очень хорошо работают со строками, особенно длинными. Я думаю, что надочислять для строки какое то значение на подобие soundex или metaphone и хранить его в базе вместе со строкой. |
| Автор: IZ@TOP 3.9.2009, 00:06 |
| Digit, а чем, собственно sphinx не подошел под эту задачу? Он умеет искать по нормализованым словам, по целым фразам и при этом поиск релевантный и полностью вписывается в задачу. |
| Автор: MoLeX 17.5.2010, 05:28 |
| Господа некрофилы, смотрите пожалуйста на дату последнего сообщения (для особо одаренных - 3.9.2009). Пол года прошло, тема не актуальна! |