Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Поиск похожих строк в базе MySQL


Автор: Digit 1.9.2009, 20:25
Доброго времени суток!

Имеется база данных MySQL, в которой хранятся строки.
В самой базе 2 таблицы: первая (основная) для постоянного хранения строк, вторая для хранения строк, которые добавили посетители сайта для модерации.

Нужно: выделять модератору новые строки (из второй таблицы), которые имеют "похожие" строки в основной (первой) таблице

Пробовал решить задачу вычисляя расстояние левенштейна между каждой строкой из основной таблици и кажной из второй, все срубается серваком довольно быстро.

Подскажите как решить эту задачку. Возможна реорганизация базы.

Автор: bars80080 1.9.2009, 22:11
во-первых, имеются ввиду слова или целые фразы
а во-вторых, в чём схожесть строк? банальное расхождение в наборе символов /не те символы, да не на тех позициях/ или всё же смысловое расхождение? допустим разные окончания?

Автор: Digit 1.9.2009, 22:17
Цитата(bars80080 @  1.9.2009,  22:11 Найти цитируемый пост)
во-первых, имеются ввиду слова или целые фразы
а во-вторых, в чём схожесть строк? банальное расхождение в наборе символов /не те символы, да не на тех позициях/ или всё же смысловое расхождение? допустим разные окончания? 

1) вот http://www.googooe.ru/all.php
2) расхождения: как минимум грамматические и пунктуационные ошибки, новые строчки (например четверостишье один раз написано просто в строку, другой раз как положено) + присутствие/отсутствие других символов (именно символов. не букв)

Автор: 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
Цитата(Digit @  2.9.2009,  10:54 Найти цитируемый пост)
IZ@TOP, спасибо за статью, но на мой взгляд там не выйдет с помощью этого поиска найти id строки в основной базе "похожей" на новую строчку. 

Все зависит от того, что ты имеешь ввиду под "похожестью".

Автор: 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. Думаю, если погуглить в нужном направлении, можно что-то интересное найти.
Хотя я до сих пор не понимаю, что конкретно нужно автору smile

Автор: 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). Пол года прошло, тема не актуальна! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)