Автор Тема: Сравнение текста на идентичность  (Прочитано 7526 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Собственно сабж. Стоит задача сравнить два документа в текстовом формате на идентичность. В случае совпадения хотя бы на 50 процентов - документы признаются идентичными.

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

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

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

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Сравнение текста на идентичность
« Ответ #1 : 11 Мая 2005, 10:27:23 »
Skif
может стоит разделить текст на предложения и работать с ними?

P.S. точнее определи задачу... это мне допустим мало что говорит:
Цитировать
В случае совпадения хотя бы на 50 процентов - документы признаются идентичными.
And no religion too...

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Сравнение текста на идентичность
« Ответ #2 : 11 Мая 2005, 11:49:27 »
perldoc File::Compare
Ворота в perl - perlmonks.org.ru

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Сравнение текста на идентичность
« Ответ #3 : 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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сравнение текста на идентичность
« Ответ #4 : 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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сравнение текста на идентичность
« Ответ #5 : 12 Мая 2005, 01:02:39 »
Green Kakadu
http://company.yandex.ru/articles/article7.html

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

Да, если я не сильно наглею, можно что нить в этом духе еще подкинуть. Буду премного благодарен.
Насчет того, что это не перловая задача... Не знаю, поставили и надо решить.
Всё будет хорошо - я договорился!

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Сравнение текста на идентичность
« Ответ #6 : 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 в котором реализованы различные алгоритмы классификации документов, но они основаны на знаниях (т.е. вначале скармливается надор уже готовых документов) и предназначены для классификации документа, т.е. насколько документы близки друг другу по тематике, а не определения близости.
 в исканиях.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Сравнение текста на идентичность
« Ответ #7 : 12 Мая 2005, 13:25:53 »
Цитировать
Skif:
Насчет того, что это не перловая задача... Не знаю, поставили и надо решить.

сама задача довольно ресурсоемка и если объемы для сравнения большие, то будет это делаться довольно долго
 в исканиях.

Оффлайн Skif

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

А вообще огромное спасибо. Все же полистав линки я все больше убеждаюсь - в лоб не решить - очень много математики. Придеться почитать  :)
Всё будет хорошо - я договорился!

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сравнение текста на идентичность
« Ответ #9 : 14 Мая 2005, 02:58:02 »
Green Kakadu
И отдельное спасибо за http://forum.searchengines.ru
Оч познавательно
Всё будет хорошо - я договорился!

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Сравнение текста на идентичность
« Ответ #10 : 14 Июня 2005, 02:18:40 »
Если еще нужно, то на днях прочитал статейку в которой описан довольно интересный алгоритм на эту тему. Прочитать можно здесь:
  И. В. Сегалович Как работают поисковые системы
Статья интересная, а в конце статьи, в параграфе Качество индекса описан алгоритм «шинглов»
Цитировать

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

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сравнение текста на идентичность
« Ответ #11 : 24 Июня 2005, 17:00:20 »
Спасибо, нужно. Даже очень.
Всё будет хорошо - я договорился!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28