Я пытаюсь определить, является ли статья или сообщение на форуме дублирующейся записью в базе данных. Я подумал об этом, и пришел к выводу, что кто-то, кто дублирует контент, сделает это, используя один из трех (по убыванию трудно обнаружить):
- просто скопируйте и вставьте весь текст
- копировать и вставлять части текста, объединяя его со своими собственными
- скопировать статью с внешнего сайта и маскировать под себя
Подготовка текста для анализа
В основном любые аномалии; цель состоит в том, чтобы сделать текст как можно более «чистым». Для более точных результатов текст «стандартизирован»:
- Удаление дублирующих пробелов и обрезка ведущих и конечных.
- Новые строки стандартизированы в \ n.
- HTML-теги удалены.
- Использование RegEx под названием Daring Fireball URL-адреса удаляются.
- Я использую BB-код в своем приложении, чтобы перейти к.
- (ä) ccented и иностранные (кроме английского) преобразуются в их не иностранную форму.
Я храню информацию о каждой статье в (1) таблице статистики и в (2) таблице ключевых слов.
(1) Таблица статистики Следующие статистические данные хранятся о текстовом содержании (так же, как этот пост)
- длина текста
- количество букв
- количество слов
- количество предложений
- среднее количество слов в предложении
- индекс автоматической читаемости
- стрельба туман
Для европейских языков следует использовать Coleman-Liau и Automated Readability Index, поскольку они не используют подсчет слогов, поэтому должны давать достаточно точную оценку.
(2) Таблица ключевых слов
Ключевые слова генерируются путем исключения огромного списка стоп-слов (общих слов), например, «the», «a», «of», «to» и т. Д., И т. Д.
Образец данных
- длина текста, 3963
- Letter_count, 3052
- word_count, 684
- суждение_счет, 33
- word_per_sentence, 21
- gunning_fog, 11,5
- auto_read_index, 9,9
- ключевое слово 1 убито
- Ключевое слово 2, офицеры
- Ключевое слово 3, полиция
Следует отметить, что после обновления статьи все приведенные выше статистические данные восстанавливаются и могут иметь совершенно разные значения.
Как я могу использовать вышеуказанную информацию, чтобы определить, существует ли статья, которая публикуется впервые, уже существует в базе данных?
Я знаю, что все, что я спроектирую, не будет идеальным, самый большой риск - (1) Контент, который не является дубликатом, будет помечен как дубликат (2) Система пропускает дублированный контент.
Таким образом, алгоритм должен генерировать число оценки риска от 0, не являющегося дублирующим риском, 5 от возможного дублирования и от 10, являющегося дублирующим. Что-нибудь выше 5 тогда есть хорошая вероятность, что содержание дублируется. В этом случае контент можно пометить и связать со статьями, которые являются возможными дубликатами, и человек может решить, удалять или разрешать.
Как я уже говорил, я храню ключевые слова для всей статьи, однако мне интересно, смогу ли я сделать то же самое на основе абзацев; это также будет означать дальнейшее разделение моих данных в БД, но это также облегчит обнаружение (2) в моем первоначальном посте.
Я думаю, взвешенное среднее между статистикой, но в каком порядке и каковы будут последствия ...