Сравните текстовое содержимое веб-сайтов
-
13-09-2019 - |
Вопрос
Я немного экспериментирую с текстовым сравнением / базовым обнаружением плагиата и хочу попробовать это для каждого веб-сайта.Тем не менее, я немного застрял в поиске правильного способа обработки текста.
Как бы вы обработали и сравнили содержимое двух веб-сайтов на предмет плагиата?
Я думаю о чем-то вроде этого псевдокода:
// 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).
Мне очень интересен любой ваш вклад или совет, поэтому, пожалуйста, стреляйте!:)
Решение
Мой подход к этой проблеме заключался бы в поиске в Google конкретных, довольно уникальных блоков текста, авторские права на которые вы пытаетесь защитить.
Сказав это, если вы хотите создать свое собственное решение, вот несколько комментариев:
- Уважение robots.txt .Если они пометили сайт как запрещенный для обхода, скорее всего, они в любом случае не пытаются извлечь выгоду из вашего контента.
- Вам нужно будет время от времени обновлять сохраненную вами структуру сайта по мере изменения веб-сайтов.
- Вам нужно будет правильно отделить текст от HTML-тегов и JavaScript.
- По сути, вам нужно будет выполнить полнотекстовый поиск по всему тексту страницы (с удалением тегов / скрипта) для текста, который вы хотите защитить.Для этого существуют хорошие опубликованные алгоритмы.
Другие советы
Вероятно, вас больше заинтересует обнаружение фрагментов.например, на многих страницах будет написано слово "home", а вам все равно.Но маловероятно, что на многих страницах будут точно такие же слова на всей странице.Таким образом, вы, вероятно, захотите сравнить и сообщить о страницах, которые имеют исключительные совпадения длиной 4,5,6,7,8 и т.д. слов и подсчетов для каждой длины.Назначьте им оценку и взвесьте их, и если вы превысите свое "магическое число", сообщите о предполагаемых копировальщиках.
Для C # вы можете использовать WebBrowser(), чтобы получить страницу и довольно легко получить ее текст.Извините, нет примера кода, удобного для копирования / вставки, но в MSDN обычно есть довольно хорошие образцы.