Занявшись вопросом отношения ПС к не уникальному контенту, решил изучить алгоритмы, при помощи которых определяются нечеткие дубликаты текстов. Ибо чтобы грамотно рерайтить текст, необходимо понимать как поисковые системы потом будут эти тексты сравнивать. С четкими-то дублями все понятно — посчитал с обоих текстов хэш, если хэши совпали, значит дубль. А вот с нечеткими дублями все немного сложнее.
Итак, один из самых известных методов определения нечетких дубликатов — это метод шинглов. Работает он следующим образом:
- Из исходных текстов удаляются все знаки препинания.
- Удаляются html-теги (если они там есть, конечно).
- Удаляются всевозможные спецсимволы, типа перевода строки.
- Также удаляется некоторый набор «стоп слов» (в основном всякие там «и», «а», «но» и прочая ботва).
- Все символы приводятся к одному регистру.
- Проводится так называемая лемматизация, то есть слова приводятся к их базовой, словарной форме. Есть подозрение что на самом деле от слов тупо отсекаются все приставки и суффиксы, оставляя только корень.
После всех этих манипуляций мы получаем строку символов одного регистра представляющую из себя последовательность слов в их базовой форме. Далее эта строка разбивается на те самые шинглы (шингл, в переводе с какого-то нерусского языка, означает то ли чешую, то ли черепицу). То есть сначала берутся слова с 1 по 10, это будет первый шингл. Потом с 2 по 11, это второй шингл. И так далее. Стандартным размером шингла считается именно 10 слов. В результате мы получаем некоторый набор шинглов для каждого текста, и если достаточно большое количество шинглов у двух текстов совпадают, значит эти два текста являются нечеткими дублями. В общем-то все довольно просто.
В реальности это все работает немного по-другому. Во-первых, длина шингла может меняться в зависимости от объема текста. Во-вторых, манипуляции с шинглами происходят не в виде строк, т.к. работа со строками довольно ресурсоемкая штука. Вместо этого манипулируют хэшами этих строк, которые предварительно высчитываются. Ну и в-третьих, для экономии ресурсов шинглы сравниваются не «каждый с каждым», а выбираются только хэши делящиеся без остатка на некоторое число, к примеру на 10. То есть по сути, в этом случае, в сравнении участвует только каждый десятый шингл. Но при этом совпадение даже одного шингла уже повод задуматься об уникальности текста. Количество шинглов участвующих в сравнении скорее всего тоже зависит от объема текста.
Поняв алгоритм шинглов, обмануть его не составляет труда. Нужно всего лишь не оставлять слишком длинных неизмененных последовательностей слов в ходе рерайта. При этом не стоит забывать о знаках препинания, стоп словах и регистре символов, а точнее о том, что они не играют никакой роли при сравнении
Я даже немного расстроился, когда узнал что яндекс нифига не использует шинглы. А-то я уже прикидывал как автоматизировать процесс рерайта. Вместо шинглов яндекс использует свой алгоритм, о котором я мало что нашел. Но судя по всему этот алгоритм активно использует другой известный метод определения нечетких дублей — так называемый метод описательных слов. О нем я как-нибудь в другой раз напишу . Вторую часть вы можете прочитать тут Поисковые системы и неуникальный контент. Часть 2.