2009-12-04 67 views
1

我正在试验一下文本比较/基本抄袭检测,并希望在网站到网站的基础上尝试。然而,我有点卡住寻找处理文本的正确方法。比较网站的文本内容

你会如何处理和比较两个网站的抄袭内容?

我想是这样的伪代码:

// 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)中实现它。

我对任何意见或建议都很感兴趣,所以请拍! :)

+1

也可以使用第三方服务来使用你自己的逻辑推动这个流氓。我可以在https://api.copyleaks.com上推荐您使用.NET实现(通过Nuget或Github)。阅读更多:https://github.com/Copyleaks/.NET-Plagiarism-Checker – No1Lives4Ever 2016-04-22 09:52:57

回答

2

我对这个问题的处理方法是Google为您试图保护的版权的特定,相当独特的文本块。

说了这么多,如果你想建立自己的解决方案,这里有一些评论:

  • 尊重的robots.txt。如果他们将该网站标记为“不抓取”,那么他们很可能无法从您的内容中获利。
  • 随着网站变更,您需要刷新您随时存储的网站结构。
  • 您将需要正确地将文本从HTML标记和JavaScript中分离出来。
  • 您将基本上需要在页面的整个文本中进行全文搜索(标签/脚本已移除)以查看您希望保护的文本。有很好的,公开的算法。
+0

+1感谢您的建议。我会尊重robots.txt(或者至少有一个选项可以打开/关闭)。我使用HtmlAgilityPack来清理和解析html,并从标签中提取文本。这使得提取文本变得非常容易。对于实际的比较,我更多地考虑了归一化压缩距离,尽管我还没有彻底检查算法。 – 2009-12-05 10:13:38

+0

这不是我寻找的答案,但是因为您获得的选票最多,而且您的答案很有帮助,所以我会接受它作为答复,谢谢您的评论:) – 2009-12-15 15:49:39

1

您可能会对片段检测更感兴趣。例如,很多页面上都会有“home”这个词,而且你不在乎。但是很可能很多页面在整个页面上都会有完全相同的单词。所以你可能想要比较和报告具有长度4,5,6,7,8等词的匹配的页面并计数每个长度。指定一个分数并加权,如果超过了你的“魔法数字”,则报告可疑的打印机。

对于C#,您可以使用webBrowser()获取页面并相当容易地获取其文本。对不起,没有代码示例方便复制/粘贴,但MSDN通常有很好的示例。

+0

+1感谢您的意见和建议。在大量文本的情况下,您的字数解决方案可能是更轻的选择。我认为你的意思是HttpWebRequest.create(Uri)创建一个webrequest,但是这个部分工作得很好。 – 2009-12-05 10:15:08

+0

由于文字往往会移动(至少在我的经验中),所以我会根据文本片段而不是页面进行比较。 – 2009-12-05 10:16:46