Подсчет хеша веб странички (HTML)

Доброго дня.

Прошу хабрасообщества идеи реализации алгоритма. Суть задачи следующая: есть веб паук, который собирает html странички с контентом. Чтоб избежать дублирования страниц (например www.example.com и www.example.com/index.php) необходимо посчитать ее хеш (md5, любой другой) чтоб быть уверенным что подобная страничка уже есть в базе.

Вроде задача простая и легко решается в лоб чем нить типа md5(file_get_contents('http://www.example.com')) НО бывает такое что не совпадает буквально 2-3 символа (например менеджер рекламы типа openx генерирует разные ID баннеров на стороне сервера). Соответственно md5 будут в корне разные. Так же может быть такое что количество символов тоже будет разное (ID баннера например может быть 5 символов и 1 символ).

Основная задача хеша — избежать дублирующихся страниц при условии что в БД может быть сотни тысяч страниц.
Какой есть алгоритм БЫСТРОГО ПОИСКА по базе с учетом что схожесть страниц может быть 100-90%

Страницы которые обрабатывает паук могут быть абсолютно разные и «динамические» вставки кода не поддаются никакой алгоритмизации. Т.е. нельзя вырезать их их HTML потока каким нибудь регэкспом.
  • Вопрос задан
  • 3615 просмотров
Пригласить эксперта
Ответы на вопрос 4
делим страницы на блоки фикс размера
хешируем блоки
сравниваем по порядку хеши блоков двух страниц
в результате имеем:

true, true, true, true, true, true, false, true, true, true, true, true, false, true

вся задача в подходящем коэффициенте.
Ответ написан
CleverMouse
@CleverMouse
Почитайте статью от Яндекса как раз про этот вопрос: download.yandex.ru/company/download/paper_65_v1.pdf. И ссылки оттуда.
Ответ написан
Комментировать
@muzzle
Может считать хэши для блоков на сайте?
Типа:
1. Взяли только дерево тэгов, без контента
2. Посчитали хэш для п1
3. Побили на условные блоки опираясь на п1
4. Посчитали хэши для каждого из п3
5. Применили Неведомый Алгоритм, который возьмет в расчет только значимые блоки

Для п5 можно поиграться, как предложил уважаемый itforge
Ответ написан
brevis
@brevis
Может чем-то таким — similar_text() и levenshtein()?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы