Как писал Interitus InSAnМожно хранить для всех имеющихся в базе страниц хеши 10-словных последовательностей. Таблицу хеш/документ или хеш/список документов. И когда вы получаете новый текст - считать для него эти хеши, и выборочно проверять - нет ли уже таких. Если есть - брать те документы, в которых они есть, и сравнивать с текущим.
Чего-то я сегодня туплю :)
Правильно ли я понял, что вы предлагаете для документа (например, 200 слов) делать 20 хешей и потом сравнивать по ним?
Как писал Artisan Зачем так сложно? Сделайте массив в котором на местах зависящих от хэша будут номера счетчиков и сравнивайте страницы в этих корзинах.
Потому, что робот не знает, какой параметр будет - на то он и робот.
И к счетчикам это никакого отношения не имеет (я их привел только в качестве примера)
Как писал Interitus Ну да. Запросили страницу - если дубль - запомнили, что по такому-то адресу дубль. 10 тыс. страниц не так много же, их даже в индекс заносить не надо.
Т.е. алгоритм следующий:
1. запросили страницу
2. сравнили со всеми страницами в базе...
дальше продолжать? ;)
прошу еще учесть, что есть ряд сайтов, которые доступны как ...com, так и ...net
а еще есть сайты, которые имеют различные домены (и даже зеркала в разных уровнях - типа tra-la-la.com и tra.123456.net)
Возвращаясь к началу - по каким признакам производить выборку страниц из базы для последующего сравнения на похожесть?
Хотя, для себя я уже вроде решил...
При индексировании страниц берется сугубо контент (удаляются все теги) и вычисляется его контрольная сумма.
При индексации следующей страницы - сверяется контрольная сумма текущей страницы и производится проверка наличия такой суммы среди проиндексированных страниц.
Страницы с одинаковой контрольной суммой проверяются методом шинглов на похожесть.
Как писал eshum Если я правильно понимаю, то метод шинглов позволяет получить одно или несколько хеш значений для каждого документа характеризующих часть документа.
не "одно или несколько хеш значений для каждого документа", а набор хеш-значений, который зависит от "величины" страницы.
В большинстве случае величина этого набора - от 200 штук.
Как писал Interitus Можно все проверять, на что есть ссылки извне. Если какая-то страница признана дублем - ссылки с нее не рассматривать. Тогда таких страниц будет не так много.
А подробнее можно?
Представьте себе ситуацию, когда рейтинг, раздающий кнопочки, "дает" код, котором ссылка вида .../?id=123
Около 10 тыс. ресурсов данный код поставили.
Согласно вашему совету, "Если какая-то страница признана дублем" - для начала нужно эти страницы "отловить".
Правильный - первый вариант.
Название ресурса. Имеет же проект какое-то название?
Поступило несколько предложений, но прошу обратить внимание, что:
1) меня не интересуют прямые ссылки, (в большинстве случае экспорт происходит через JavaScript)
2) аудитория с Украины должны быть _преобладающей_ - т.е. более 50%
InSAnМожно хранить для всех имеющихся в базе страниц хеши 10-словных последовательностей. Таблицу хеш/документ или хеш/список документов. И когда вы получаете новый текст - считать для него эти хеши, и выборочно проверять - нет ли уже таких. Если есть - брать те документы, в которых они есть, и сравнивать с текущим.
Чего-то я сегодня туплю :)
Правильно ли я понял, что вы предлагаете для документа (например, 200 слов) делать 20 хешей и потом сравнивать по ним?
Зачем так сложно? Сделайте массив в котором на местах зависящих от хэша будут номера счетчиков и сравнивайте страницы в этих корзинах.
Потому, что робот не знает, какой параметр будет - на то он и робот.
И к счетчикам это никакого отношения не имеет (я их привел только в качестве примера)
Ну да. Запросили страницу - если дубль - запомнили, что по такому-то адресу дубль. 10 тыс. страниц не так много же, их даже в индекс заносить не надо.
Т.е. алгоритм следующий:
1. запросили страницу
2. сравнили со всеми страницами в базе...
дальше продолжать? ;)
прошу еще учесть, что есть ряд сайтов, которые доступны как ...com, так и ...net
а еще есть сайты, которые имеют различные домены (и даже зеркала в разных уровнях - типа tra-la-la.com и tra.123456.net)
Возвращаясь к началу - по каким признакам производить выборку страниц из базы для последующего сравнения на похожесть?
Хотя, для себя я уже вроде решил...
При индексировании страниц берется сугубо контент (удаляются все теги) и вычисляется его контрольная сумма.
При индексации следующей страницы - сверяется контрольная сумма текущей страницы и производится проверка наличия такой суммы среди проиндексированных страниц.
Страницы с одинаковой контрольной суммой проверяются методом шинглов на похожесть.
Критика будет? ;)
Artisan, причем здесь письма?
речь идет о похожести страниц, а не о регистрации ресурсов и доставке почты.
Если я правильно понимаю, то метод шинглов позволяет получить одно или несколько хеш значений для каждого документа характеризующих часть документа.
не "одно или несколько хеш значений для каждого документа", а набор хеш-значений, который зависит от "величины" страницы.
В большинстве случае величина этого набора - от 200 штук.
Можно все проверять, на что есть ссылки извне. Если какая-то страница признана дублем - ссылки с нее не рассматривать. Тогда таких страниц будет не так много.
А подробнее можно?
Представьте себе ситуацию, когда рейтинг, раздающий кнопочки, "дает" код, котором ссылка вида .../?id=123
Около 10 тыс. ресурсов данный код поставили.
Согласно вашему совету, "Если какая-то страница признана дублем" - для начала нужно эти страницы "отловить".
Шинглы например можно попробовать применить, почитайте тексты на Yandex корпоративном сайте, но это тоже не всегда помогает, ...
Как проверить - это я знаю. Вопрос в другом - что проверить :)
Т.е. каким образом отбирать страницы, которые подлежат проверке.
Если же проверять все подряд - никаких мощностей не хватит :)
Т.е.?
Вы регистрируете ресурсы постоянно, а письма о регистрации не доходят?
Мыло всое в личку бросьте - проверим отлупы.