Сравните текстовое содержание сайтов

Я немного экспериментирую с текстовым сравнением / базовым обнаружением плагиата и хочу попробовать это на веб-сайте. Тем не менее, я немного застрял в поиске правильного способа обработки текста.

Как бы вы обработали и сравнили содержание двух сайтов на предмет плагиата?

Я думаю, что-то вроде этого псевдокода:

// extract text
foreach website in websites
  crawl website - store structure so pages are only scanned once
  extract text blocks from all pages - store this is in list

// compare      
foreach text in website1.textlist
  compare with all text in website2.textlist

Я понимаю, что это решение может очень быстро накапливать большое количество данных, поэтому его можно будет работать только с очень маленькими веб-сайтами.

Я еще не определился с реальным алгоритмом сравнения текста, но сейчас я больше заинтересован в том, чтобы заставить работать алгоритм реального процесса первым.

Я думаю, что было бы неплохо извлечь весь текст как отдельные текстовые фрагменты (из абзацев, таблиц, заголовков и т. Д.), Так как текст может перемещаться по страницам.

Я реализую это в C# (возможно, ASP.NET).

Я очень заинтересован в любом вкладе или совете, который вы могли бы получить, поэтому, пожалуйста, стреляйте!:)

2 ответа

Решение

Мой подход к этой проблеме заключается в поиске в Google определенных, довольно уникальных блоков текста, авторские права которых вы пытаетесь защитить.

Сказав это, если вы хотите построить собственное решение, вот несколько комментариев:

  • Респект robots.txt. Если они пометили сайт как запрещающий сканирование, скорее всего, они все равно не попытаются извлечь выгоду из вашего контента.
  • Вам нужно будет время от времени обновлять структуру сайта, которую вы сохраняли при изменении сайтов.
  • Вам нужно будет правильно отделить текст от тегов HTML и JavaScript.
  • По сути, вам нужно будет выполнить полнотекстовый поиск по всему тексту страницы (с удаленными тегами / скриптом) для текста, который вы хотите защитить. Есть хорошие, опубликованные алгоритмы для этого.

Вы, вероятно, будете больше заинтересованы в обнаружении фрагментов. Например, на многих страницах будет слово "дом", и вам все равно. Но маловероятно, что на многих страницах будут одинаковые слова на всей странице. Таким образом, вы, вероятно, хотите сравнивать и сообщать о страницах, на которых есть совпадения длиной 4,5,6,7,8 и т. Д. И количество слов для каждой длины. Присвойте им баллы и определите их вес, и если вы превысите свое "магическое число", сообщите о подозреваемых ксероксах.

Для C# вы можете использовать webBrowser(), чтобы получить страницу и довольно легко получить ее текст. Извините, пример кода не подходит для копирования / вставки, но MSDN обычно имеет довольно хорошие примеры.

Другие вопросы по тегам