Алогритм сравнения страниц

Статус
Закрыто для дальнейших ответов.

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Тоесть мы допустим сегодня загружаетм страничку с сайта, на следующий день страница изменяется как наиболее эфективно вычислить разницу между страниц(проблемма возникает из за динамической установки банеров в нутрь сайта)
Тупое бинарное сравнение нам даст кучу ошибок...
тк текст может быть измене как в большую строну так и в меньшую..

Все ясно?
У кого есть мысли?..
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
Так... я думаю, что самый оптимальный вариант это сравнение полученных заголовков, которые возвращаются сайтом.
А там ты так же можешь проверить размер, т.к. он возвращается наряду с другими параметрами.
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Нет проблемма не в том что изменилась ли страница или нет, нужно найти измененный текст, притом как можно автоматизированей...
 

Epsilon

Новичок
Регистрация
26.12.2005
Сообщения
2
Нет проблемма не в том что изменилась ли страница или нет, нужно найти измененный текст, притом как можно автоматизированей...
Привет.
Я правильно понимаю проблему - нужно сравнить 2 текста (а именно HTML-страницы) и найти все отличия (грубо - строки, которые отличаются, а в идеале - группы символов и смещения, где эти группы символов встречаются) ?
 

Epsilon

Новичок
Регистрация
26.12.2005
Сообщения
2
Нет проблемма не в том что изменилась ли страница или нет, нужно найти измененный текст, притом как можно автоматизированей...
Существует как минимум два решения проблемы. Один путь - сравнение по строкам. То есть грубо говоря, сравниваются файлы построчно и результатом является 3 массива - в первом массиве находятся строки, которые добавлены, во втором - которые были удалены и в третьем массиве - строки, которые были изменены. Далее алгоритм можно переносить на уровень строк и для третьего массива вновь прогонять этот алгоритм, только уже относительно символов в строке. Так можно выявить куски текста, которые были добавлены или удалены.
Второй путь основан на том, что HTML - это по сути дела XML, то есть дерево нод, содержащее аттрибуты для каждой ноды, которые могут поменяться и CDATA для каждой ноды. Если страница XHTML-валидна, то на ней будет работать XSLT. Где-то у меня лежит на работе XSLT-скрипт, который производит многоуровневое рекурсивное сканирование XML-дерева с целью выявления отличий. Результатом работы скрипта является разностный XML.
Если страница не является XHTML-валидной, то в принципе её можно привести к требуемому виду используя специальный класс XHTML-валидатор. Есть много таких в инете. Есть и собственная разработка - работает вроде бы сносно, вышлю по почте.
Очень хороший алгоритм сравнения в Total Commander, особенно в последних версиях. Но он закрыт. Как работает - можно только догадываться.
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Есть и собственная разработка - работает вроде бы сносно, вышлю по почте.
Epsilon, Буду очень благодарен...
Очень хороший алгоритм сравнения в Total Commander, особенно в последних версиях. Но он закрыт. Как работает - можно только догадываться.
да в TC действтельно хорший метод сравнения хотя видел еще хорошие алгоритмы в WinMerge, но код тоже закрыт..
 
Статус
Закрыто для дальнейших ответов.
Верх Низ