Forum Webscript.Ru

Программирование => Perl => Тема начата: Skif от 11 Мая 2005, 03:35:46

Название: Сравнение текста на идентичность
Отправлено: Skif от 11 Мая 2005, 03:35:46
Собственно сабж. Стоит задача сравнить два документа в текстовом формате на идентичность. В случае совпадения хотя бы на 50 процентов - документы признаются идентичными.

Простой пример. Берем любой текстовый документ. Удаляем из него несколько предложений. Несмотря на их отсутствие, этот и исходный документ все таки одно и тоже.

Как произвести сравнение? Может есть подходящие модули? Буду благодарен за любую помощь.
:beer:

P.S.: Да. Самый тривиальный способ, что напрашивается - создать массив/хеш слов, что встречаются в документе и их количество. И на разнице сыграть. Вот только умозаключения все же подсказывают ненадежность такого решения :( Да и не такое уж оно тривиальное в плане написания.
Название: Сравнение текста на идентичность
Отправлено: commander от 11 Мая 2005, 10:27:23
Skif
может стоит разделить текст на предложения и работать с ними?

P.S. точнее определи задачу... это мне допустим мало что говорит:
Цитировать
В случае совпадения хотя бы на 50 процентов - документы признаются идентичными.
Название: Сравнение текста на идентичность
Отправлено: cr4ck3r от 11 Мая 2005, 11:49:27
perldoc File::Compare
Название: Сравнение текста на идентичность
Отправлено: Green Kakadu от 11 Мая 2005, 14:27:43
http://forum.searchengines.ru/showthread.php?postid=778982#post778982
http://company.yandex.ru/articles/article7.html

.
Цитировать
Skif:
P.S.: Да. Самый тривиальный способ, что напрашивается - создать массив/хеш слов, что встречаются в документе и их количество. И на разнице сыграть. Вот только умозаключения все же подсказывают ненадежность такого решения Да и не такое уж оно тривиальное в плане написания.

можешь попробовать сделать так:
создаешь индекс из слов и позиций слов в документе для эталона и измененной страницы и оцениваешь изменения.
Задача усложняется если тебе нужно сравнивать не конкретный документ на предмет изменений, а какой-либо документ на похожесть по отношению к  довольно большому набору документов. Мягко говоря, это не совсем перловая задача.
Название: Сравнение текста на идентичность
Отправлено: Skif от 12 Мая 2005, 00:42:44
Скажем так основная задача - сравнения ряда веб-страничек на идентичность. Пояснюсь. Например, я имею скачанные странички с нескольких серверов, условимся, что серверов пока 10, на каждом не менее 50 страниц. И того 500 страниц текста. Мне необходимо проверить совпадает в них текст или нет (то есть сначала отпарсивается текст со страниц и сохраняется либо в базу либо в текстовый файл, потом, полученные документы проверяются на идентичность) тривиальный пример:
Первая страница
http://www.opennet.ru/base/net/postfix_per_user_acl.txt.html
Вторая страница.
http://skif.in.ua/cgi-bin/article.pl?lang=rus&text=postfix_permission_

Основной текст полностью идентичен. За исключением пары предложений. Но имеется определенный муссор, который не совпадает. Например в OpenNet-овском варианте присутствуют заголовки письма, а на основном сервере их, по понятным причинам нет. Ну и так далее по мелочам. Вот мне и нужно доказать, что странички вообще-то копии друг дружки за рядом исключений, и копию убрать.
Название: Сравнение текста на идентичность
Отправлено: Skif от 12 Мая 2005, 01:02:39
Green Kakadu
http://company.yandex.ru/articles/article7.html

И почему я нечеткую математику с нейронными сетями завалил? Эх... Похоже оно :)

Да, если я не сильно наглею, можно что нить в этом духе еще подкинуть. Буду премного благодарен.
Насчет того, что это не перловая задача... Не знаю, поставили и надо решить.
Название: Сравнение текста на идентичность
Отправлено: Green Kakadu от 12 Мая 2005, 13:21:34
обзор методов кластеризации документов:
http://www.dialog-21.ru/Archive/2001/volume2/2_26.htm

И глянь тут:
http://forum.searchengines.ru/showthread.php?postid=30367#post30367

Цитировать

 Существует два подхода определения близости двух документов - на основе статистической модели (мера косинуса - LSA/LSI/PLSA и т.д.) и технологии, основанные на знаниях.
Стандартный алгоритм определения близости - можно рассчитать меру косинуса угла между двумя документами


Для кластеризации документов есть модуль: AI::Categorizer - Automatic Text Categorization (http://search.cpan.org/~kwilliams/AI-Categorizer-0.07/lib/AI/Categorizer.pm) в котором реализованы различные алгоритмы классификации документов, но они основаны на знаниях (т.е. вначале скармливается надор уже готовых документов) и предназначены для классификации документа, т.е. насколько документы близки друг другу по тематике, а не определения близости.
Название: Сравнение текста на идентичность
Отправлено: Green Kakadu от 12 Мая 2005, 13:25:53
Цитировать
Skif:
Насчет того, что это не перловая задача... Не знаю, поставили и надо решить.

сама задача довольно ресурсоемка и если объемы для сравнения большие, то будет это делаться довольно долго
Название: Сравнение текста на идентичность
Отправлено: Skif от 14 Мая 2005, 02:53:56
Ну в принципе исходя из этого я вижу такую систему так(пока оставим в стороне математику), получается: Либо распаралеливание на потоки и обработку в них и соответственно не менее 2-х процессоров. Либо почти тоже, но вот выкачка документов и локальное зеркало - при помощи перла, а все остальное на старом добром Си++
Хотя это все лирика :(
Насчет модуля. интересный. Но у меня создается впечатление, да и вы своим тезисом его подтвердили, что там задействован все же принцип нейронных сетей.
А это не самый удачный вариант :( При сравниваемых значениях близких к 0 на этапе "скармливания" это может дать большую вероятностную ошибку на выходе для реального документа. Что есть не очень Гуд.
То есть нужно будет заранее скормить похожие, но очень контрастные документы. Например, мой пример сразу же не подойдет - они слишком похожи и в итоге на реальном документе ошибка будет огромной.

А вообще огромное спасибо. Все же полистав линки я все больше убеждаюсь - в лоб не решить - очень много математики. Придеться почитать  :)
Название: Сравнение текста на идентичность
Отправлено: Skif от 14 Мая 2005, 02:58:02
Green Kakadu
И отдельное спасибо за http://forum.searchengines.ru
Оч познавательно
Название: Сравнение текста на идентичность
Отправлено: Green Kakadu от 14 Июня 2005, 02:18:40
Если еще нужно, то на днях прочитал статейку в которой описан довольно интересный алгоритм на эту тему. Прочитать можно здесь:
   И. В. Сегалович Как работают поисковые системы (http://www.dialog-21.ru/direction_fulltext.asp?dir_id=15539&forum_id=&parent_message_id=)
Статья интересная, а в конце статьи, в параграфе Качество индекса описан алгоритм «шинглов»
Цитировать

Для каждого десятисловия текста рассчитывается контрольная сумма (шингл). Десятисловия идут внахлест, с перекрытием, так, чтобы ни одно не пропало. А затем из всего множества контрольных сумм (очевидно, что их столько же, сколько слов в документе минус 9) отбираются только те, которые делятся на, скажем, 25. Поскольку значения контрольных сумм распределены равномерно, критерий выборки никак не привязан к особенностям текста. Ясно, что повтор даже одного десятисловия – весомый признак дублирования, если же их много, скажем, больше половины, то с определенной (несложно оценить вероятность) уверенностью можно утверждать: копия найдена! Ведь один совпавший шингл в выборке соответствует примерно 25 совпавшим десятисловиям в полном тексте!
Название: Сравнение текста на идентичность
Отправлено: Skif от 24 Июня 2005, 17:00:20
Спасибо, нужно. Даже очень.