【问题标题】:Plagiarism Analyzer (compared against Web Content)抄袭分析器(与 Web 内容相比)
【发布时间】:2009-10-14 16:07:08
【问题描述】:

大家好,全世界的人,

背景

我是计算机科学专业的最后一年学生。我提出了我的最终双模块项目,它是一个抄袭分析器,使用 Java 和 MySQL。

抄袭分析器将:

  1. 扫描上传文件的所有段落。分析从哪个网站复制的每个段落的百分比。
  2. 仅突出显示每个段落中准确复制自哪个网站的字词。

我的主要目标是开发类似 Turnitin 的东西,并尽可能改进。

我有不到 6 个月的时间来开发这个程序。我的范围如下:

  1. Web Crawler 实现。 可能会使用 Lucene API 或开发我自己的 Crawler(哪个在时间开发和可用性方面更好?)。
  2. 散列和索引。 改进搜索和分析。

问题

这是我的问题:

  1. MySQL 可以存储这么多信息吗?
  2. 我错过了什么重要的话题吗?
  3. 您对此项目有何看法?
  4. 对于执行相似性分析有什么建议或技术吗?
  5. 可以对段落和单词进行哈希处理吗?

提前感谢您提供的任何帮助和建议。 ^^

【问题讨论】:

  • 这还不算给同学们吃草? ;-)
  • 你可能想看看标准化压缩距离:stackoverflow.com/questions/1085048/…
  • 非常感谢 Stephan202 强调这一点! ;)
  • 那么...你完成了吗? :)
  • 您还可以通过连接第三方服务来丰富您的服务结果。为此,我可以推荐api.copyleaks.com API。

标签: java mysql web-crawler plagiarism-detection


【解决方案1】:

您是否考虑过另一个不会因缺乏可用资源而注定失败的项目?

如果你真的想去“嘿,让我们抓取整个网络!”路线,您将需要打破 HBase 和 Hadoop 之类的东西以及许多机器。 MySQL 将严重不足。 TurnItIn 声称已经抓取并索引了 120 亿个页面。谷歌的索引更像是[已编辑]。 MySQL,或者就此而言,任何 RDBMS,都无法扩展到该级别。

要实现这一点,唯一现实的方法是,如果您做一些非常聪明的事情,并弄清楚如何构建对 Google 的查询,以揭示 Google 索引中已经存在的文档的抄袭。我建议使用消息队列并同步访问搜索 API。消息队列还将允许您将查询限制到合理的速率。避免停用词,但您仍在寻找近乎精确的匹配项,因此查询应该类似于:"* quick brown fox jumped over * lazy dog" 不要打扰运行最终类似的查询:"* * went * * *" 并忽略返回 94,000,000 次点击的结果。那些不会是抄袭,它们会是名言或过于笼统的查询。您正在寻找与您的原始句子或某些类似指标完全匹配的低于 10 个点击或数千个点击。即使这样,这也应该只是一种启发式方法——除非有很多危险信号,否则不要标记文档。相反,如果所有内容都以零点击率返回,则它们具有不同寻常的原创性。图书搜索通常需要更精确的查询。足够可疑的东西应该触发对原始页面的 HTTP 请求,最终决定应该始终是人类的权限。如果文档引用了它的来源,那不是抄袭,你会想要检测到这一点。误报是不可避免的,而且很可能很常见,如果不是经常出现的话。

请注意,TOS 禁止永久存储 Google 索引的任何部分。

不管怎样,您都选择了非常困难的事情,无论您如何构建它,并且可能非常昂贵和耗时,除非您让 Google 参与其中。

【讨论】:

  • 此外,维基百科页面的点击率比其他页面更危险,至少对于维基百科来说,下载整个内容并直接处理是合理的。
  • 感谢一百万 Bob Aman 提供的所有建议和突出显示的重要问题。非常感谢您的好意。好吧,鲍勃,关于我提出的项目,我不能掉头。我会尽力而为,因为我已经下定决心挑战这一点。我希望我的梦想能够实现。我总是想做一些我感兴趣的事情,它可以帮助我提高我的技能。我将探索 Google Search API。我只是想知道谷歌是否有任何限制,因为我正在考虑改用 Lucene(Java 开源搜索 API)。再次感谢! ;)
  • 顺便问一下,Bob Aman,在这 6 个月的未来,如果我有任何问题(我会非常努力地尝试),我可以在这里询问您的指导吗?再次感谢您愿意分享您的知识。由于过去几周的忙碌,也很抱歉回复晚了。
  • 不,Google 不在乎您是否使用 Lucene,只要您不以某种方式将他们的索引复制到其中即可。 Google Search API 有服务协议条款。这是一个罕见的 TOS 必读。是的,只需再次回复此答案,我就会看到它。
  • 哦,我明白了。实际上,我已经完成了这个项目近 60% 的文档,很快我就可以完全专注于开发了。我将阅读罕见的 TOS 必读。哈哈..非常感谢您提供的帮助。 ;)
【解决方案2】:

1) 制作自己的网络爬虫?看起来您可以轻松地将所有可用时间用于此任务。尝试为此使用标准解决方案:这不是程序的核心。

您仍然有机会自己制作或在之后尝试另一个(如果您还有时间的话!)。 您的程序应该只在本地文件上运行,以免被绑定到特定的爬虫/API。

也许你甚至不得不为不同的网站使用不同的爬虫

2) 散列整个段落是可能的。您可以散列任何字符串。 但这当然意味着您只能检查完全复制的整个段落。 也许句子​​会是一个更好的测试单元。 您可能应该在散列之前“规范化”(转换)句子/段落,以理清大写/小写等细微差异。

3) MySQL 可以存储大量数据。

通常的建议是:坚持标准 SQL。如果你发现你有太多的数据,你仍然可以使用另一个 SQL 实现。

当然,如果您有太多数据,首先要寻找减少数据的方法,或者至少减少 mySQL 中的数据。例如,您可以将哈希值存储在 MySQL 中,但将原始页面(如果需要)存储在普通文件中。

【讨论】:

  • 嗨 Siukurnin,非常感谢您提出的建议和突出显示的问题。当我开始开发我提议的系统时,我会考虑所有提供的信息和建议。
【解决方案3】:

在线代码通常在开源许可下分发。大多数代码只是教程。根据您的逻辑,从任何网站复制任何内容都是抄袭。这意味着您不能接受和使用您在此处获得的任何答案。如果你真的想完成你的项目,只需编写一个系统来比较同一班级和以前班级学生的代码。它效率更高。这种系统的一个例子是MOSS(还有一篇论文讨论了它是如何工作的)。这东西真的很高效,不用任何网络爬虫。

【讨论】:

  • 是的,Piligrim,我非常清楚这一点,,,恰好是我提出了与网络内容进行比较的抄袭分析器。因此,我不能改变我的范围。无论如何感谢您的建议和信息。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2014-03-22
  • 2012-07-03
  • 1970-01-01
  • 2013-12-12
相关资源
最近更新 更多