【问题标题】:Compare the textual content of websites比较网站的文本内容
【发布时间】:2009-12-04 23:59:47
【问题描述】:

我正在尝试一些文本比较/基本抄袭检测,并希望在网站到网站的基础上进行尝试。但是,我有点难以找到处理文本的正确方法。

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

我在想类似这样的伪代码:

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

我对您可能提出的任何意见或建议非常感兴趣,所以请拍摄! :)

【问题讨论】:

标签: c# algorithm optimization comparison plagiarism-detection


【解决方案1】:

我解决这个问题的方法是使用谷歌搜索特定的、相当独特的文本块,您正试图保护其版权。

话虽如此,如果您想构建自己的解决方案,这里有一些 cmets:

  • 尊重 robots.txt。如果他们将该网站标记为“请勿抓取”,那么他们很可能不会尝试从您的内容中获利。
  • 随着网站的变化,您需要不时刷新您存储的网站结构。
  • 您需要正确地将文本与 HTML 标记和 JavaScript 分开。
  • 您基本上需要在页面的整个文本中进行全文搜索(已删除标签/脚本)以查找要保护的文本。对此有很好的已发布算法。

【讨论】:

  • +1 感谢您的建议。我会尊重 robots.txt(或者至少可以选择打开/关闭它)。我正在使用 HtmlAgilityPack 来清理和解析 html,并从标签中提取文本。这使得提取文本变得非常容易。对于实际比较,我更多地考虑归一化压缩距离,虽然我还没有彻底检查算法。
  • 这不是我真正想要的答案,但是由于您获得了最多的选票,而且您的回答很有帮助,我会接受它作为答案,感谢您的评论:)
【解决方案2】:

您可能会对片段检测更感兴趣。例如,很多页面上都会有“家”字样,而您不在乎。但是,很多页面不太可能在整个页面上有完全相同的单词。因此,您可能想要比较和报告长度为 4、5、6、7、8 等单词的精确匹配的页面,并为每个长度计算计数。给它们打分并加权,如果你超过了你的“神奇数字”,就报告可疑的复印机。

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

【讨论】:

  • +1 感谢您的 cmets 和建议。在大量文本的情况下,您的字数统计解决方案可能是一个更轻松的选择。我认为您的意思是 HttpWebRequest.create(Uri) 用于创建 webrequest,但这部分工作得很好。
  • 由于文本倾向于四处移动(至少根据我的经验),我将基于文本片段而不是页面进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多