Сравните текстовое содержание сайтов
Я немного экспериментирую с текстовым сравнением / базовым обнаружением плагиата и хочу попробовать это на веб-сайте. Тем не менее, я немного застрял в поиске правильного способа обработки текста.
Как бы вы обработали и сравнили содержание двух сайтов на предмет плагиата?
Я думаю, что-то вроде этого псевдокода:
// 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 обычно имеет довольно хорошие примеры.