Подсчет хеша веб странички (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 потока каким нибудь регэкспом.
  • Вопрос задан
  • 3586 просмотров
Пригласить эксперта
Ответы на вопрос 5
делим страницы на блоки фикс размера
хешируем блоки
сравниваем по порядку хеши блоков двух страниц
в результате имеем:

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()?
Ответ написан
aktuba
@aktuba
Получаем только контент (не так сложно это сделать, с допущениями конечно-же) и по полученному контенту считаем хеш.
Для получения контента на гитхабе есть готовые либы под все языки уже, надо просто взять и доработать под себя. Вот пример: aktuba.com/api.php
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы