5

嗨,全世界的每个人,

背景

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

抄袭分析器将:

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

我的主要目标是开发像 Turnitin 这样的东西,如果可能的话会改进。

我有不到 6 个月的时间来开发这个程序。我已经确定了以下范围:

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

问题

以下是我的问题:

  1. MySQL可以存储那么多信息吗?
  2. 我错过了什么重要的话题吗?
  3. 你对这个项目有什么看法?
  4. 执行相似性分析的任何建议或技术?
  5. 可以散列段落以及单词吗?

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

4

3 回答 3

4

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

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

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

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

无论如何,你选择了做一些非常困难的事情,无论你如何构建它,并且可能非常昂贵和耗时,除非你让谷歌参与其中。

于 2009-10-14T17:50:04.577 回答
1

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

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

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

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

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

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

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

于 2009-10-14T16:26:36.360 回答
0

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

于 2009-10-15T00:04:36.790 回答