Как сравнить две html страницы через php

neoks
На сайте с 17.03.2010
Offline
152
2242

Здравствуйте, имеются две html страницы, визуально похожие, но на второй html странице:

1) Текст слегка отличается (убрано или заменено слово), но на 98% текст одинаковый

2) Шаблон визуально на 100% одинаковый, но код шаблона одинаковый только на 96%

Нужно посредством php определить что эти две страницы как минимум на 90% одинаковы. Но нужно не только определить, но и максимально ускорить процесс определения.

Задача такая:

Хеш первой страницы будет хранится в mysql (таких хешей 2-3к).

Хеш второй страницы будет создаваться единоразово и проверятся по хешам в mysql, таких операций 30-40к в час.

-----------------------------

Подскажите какие есть методы создания хешей страницы, чем меньше хеш размера тем лучше.

За ранее спасибо.

B
На сайте с 13.02.2008
Offline
262
#1

neoks, Вряд ли хеши вам здесь помогут - с ними можно проверять на полное тождество/нетождество.

neoks:
таких операций 30-40к в час

Это десять сравнений в секунду. ПХП вам вряд ли поможет. В питоне к примеру есть модуль difflib, позволяющий выявлять разницу между двумя текстами, но по опыту могу сказать, что работает не очень быстро, хотя там есть несколько методов с разной точностью и скоростью. Или можно что-то с обратным индексом замутить (аля поисковая система), но опять таки у вас поиск не по короткой фразе будет, а по большому тексту, что скажется на производительности.

neoks
На сайте с 17.03.2010
Offline
152
#2

borisd, Я сделал псевдохеш сверяя текс и шаблон, но размер этого хеша достаточно велик и поиск по такой базе происходит очень долго. Питон к сожалению не вариант.

B
На сайте с 13.02.2008
Offline
262
#3
neoks:
Питон к сожалению не вариант

Ознакомьтесь с питоновским модулем, а потом попробуйте его аналог на ПХП:

https://github.com/chrisboulton/php-diff

The logic behind the core of the diff engine (ie, the sequence matcher) is primarily based on the Python difflib package.



---------- Добавлено 22.05.2016 в 14:44 ----------

Еще можно страницы представлять как мешки слов (без учета последовательности слов и повторов), т.е. в виде множеств слов. Потом для двух сравниваемых страниц определять отношение длины пересечения множеств слов двух страниц к длине множества слов одной страницы. Если отношение меньше определенного порога, то страницу забраковывать. Это будет грубая, но быстрая провекрка. А если же страницы проходят эту грубую проверку, то далее они отправляются на точную, но медленную проверку.

D
На сайте с 14.01.2007
Offline
153
#4

а структура у этих страничек одинаковая?

а вот эти тексты на сколько % расходятся?


<p>У попа было собака</p>
<span>У <strong>попа</strong> было собака</span>
C
На сайте с 26.10.2013
Offline
54
#5

С хешами не получится, ИМХО

Попробуйте strip_tags и levenshtein ( или similar_text, но она медленнее ), если нужно сравнивать контент, а не шаблон.

Услуги по парсингу данных (/ru/forum/939826), единоразовый и регулярный сбор данных. Любые объемы. Скрипты на PHP, создание и доработка, решение проблем с сайтами Пишите в личные сообщения или скайп
TF-Studio
На сайте с 17.08.2010
Offline
334
#6

метод шинглов для начала.

задавался таким же вопросом. готовых адекватных решений пока не увидел. копал не глубоко

---------- Добавлено 23.05.2016 в 13:47 ----------

colorito:
С хешами не получится, ИМХО
Попробуйте strip_tags и levenshtein ( или similar_text, но она медленнее ), если нужно сравнивать контент, а не шаблон.
Функция возвращает расстояние Левенштейна между двумя строками, или -1, если хотя бы одна из строк длиннее 255 символов (этого более чем достаточно для сравнения имен или поиска по словарю, а проводить генетический анализ на PHP просто несерьезно).

как-то не айс совет-то

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
neoks
На сайте с 17.03.2010
Offline
152
#7

Dinozavr, Я отдельно текст и шаблон проверяю, оставляю только текст без тегов и т.д, но сам текст может быть разный на 90%

colorito, Попробовал similar_text, очень медленная функция, остальное посмотрю.

borisd, Ваш метод проверяет 10к шаблонов в секунду, на данный момент самый быстрый способ, останавливаюсь наверно на нем, для текущих задач хватит.

TF-Studio, метод шинглов к сожалению смог разогнать только до 4к шаблонов в секунду.

---

Всем спасибо за помощь :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий