[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: similar_text и ускорение проверки похожих текстов
Kumena
Доброго дня, коллеги!

Прошу помощи в решении вот такой задачи:

Мне требуется проверять 1000 текстов на предмет дубликатов. При уровне схожести более ~90% отмечать найденную пару как дублирующуюся, сохранив процент схожести. Т.е. точно то, что делает функция:
similar_text($orig_content,$dup_content,$dup_per)

где переменной $dup_per присваивается значение процента схожести.

А дальше в цикле перебора у меня наступило "затмение": Сейчас я выбираю каждую из 1000 строк в MySQL-таблице и сравниваю её попарно с каждой из оставшихся 999.
В результате, скрипт, запущенный вчера, на данный момент еще дорабатывает.

Я пробовал уйти от использования функции similar_text, заменив её полнотекстовый поиском MySQL:

Для каждой из 1000 статей выполнял запрос вида:

SELECT `id`,MATCH (content) AGAINST ('$row[content]' IN BOOLEAN MODE) AS `per` FROM `table` WHERE MATCH (content) AGAINST ('$row[content]') >'90' ORDER BY (per)

Но мне не понятно как значения, отдаваемые функцией MATCH привести к проценту "схожести", отдаваемому функцией similar_text.

Скорее всего полнотекстовый поиск это именно то, что мне нужно, но как реализовать его подобно тому, как это делает similar_text и получать те же значения?





Спустя 2 дня, 4 часа, 13 минут, 38 секунд (30.07.2012 - 22:03) Kumena написал(а):
Может быть тема привлечет больше внимание профи в разделе MySQL?

Спустя 1 час, 4 минуты, 23 секунды (30.07.2012 - 23:08) kamanch написал(а):
Цитата
Сейчас я выбираю каждую из 1000 строк в MySQL-таблице и сравниваю её попарно с каждой из оставшихся 999.

Для чего?
1-ую сравниваем с 999 (2-1000)
2-ую с 998 (3-1000)
...
999-ую только с 1000-ой.


Спустя 6 часов, 51 минута, 56 секунд (31.07.2012 - 06:00) Kumena написал(а):
Kamanch, большущее спасибо! Ням-ням, какой вкусный совет smile.gif

Не найдется ли еще совет знатока полнотекстовых MySQL - поисков?
В мануалах пишут, что MATCH возвращает "величину релевантности, т.е. степень сходства между строкой поиска и текстом".
Определить "на глаз" зависимость между этими значениями и процентом от функции similar_text не получилось.

Спустя 6 минут, 34 секунды (31.07.2012 - 06:06) kamanch написал(а):
Как-то не было нужды в этом, поэтому ничем помочь более не могу.
Разве что ссылку подкинуть Полнотекстовый поиск в MySQL

Спустя 1 час, 5 минут, 14 секунд (31.07.2012 - 07:11) Kumena написал(а):
А может быть, стоит делать какой-нибудь хэш каждой статьи и сравнивать уже не сами тексты, а их контрольные суммы или что-то вроде этого?

Kamanch, еще раз спасибо!


Спустя 16 минут, 30 секунд (31.07.2012 - 07:28) kamanch написал(а):
 echo md5('текст, с различем в одну запятую')."<br />";
echo md5('текст с различем в одну запятую');

На выходе:
308a67b193157a8434e48cf0b737b5fd
2bb1cc833c4ec00fb9df2d789dacce1a

Как видишь, ничего общего.

Спустя 50 минут, 24 секунды (31.07.2012 - 08:18) Nikitian написал(а):
А не пробовали soundex() для транслитерованной строки использовать? Soundex есть и в мускуле встроенный. Или расстояние левенштейна высчитывать - вам же относительность похожести нужна, а не абсолютность?

Спустя 8 часов, 40 минут, 12 секунд (31.07.2012 - 16:59) Kumena написал(а):
Расстояние Левенштайна ( levenshtein() ) пробовал, с неё начал, - замечательная штука, но при схожей с similar_text() скорости работы имеет ограничение на размер сравниваемых строк. В моем случае similar_text() - более подходящая штука.

soundex() не пробовал, т.к. не ожидаю от него кардинально лучшей скорости. Разве что вот именно встроенный MySQL-овский.
Посмотрел его описание в мануале: soundex() возвращает строку (в том виде как она звучит), т.е. сравнение пары строк проводить дальше всё равно нужно. unsure.gif

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.