全世界的每个人,
背景
我是计算机科学的最后一年学生。我提出了我的最终双模块项目,它是一个使用Java和MySQL的抄袭分析器。
抄袭分析器将:
我的主要目标是开发像Turnitin这样的东西,尽可能改进。
我有不到6个月的时间来开发该计划。我确定了以下内容:
问题
以下是我的问题:
提前感谢您的任何帮助和建议。 ^^
答案 0 :(得分:4)
您是否考虑过另一个因缺乏资源而注定失败的项目?
如果你真的想去“嘿,让我们抓住整个网络!”路线,你需要打破像HBase和Hadoop以及许多机器这样的东西。 MySQL将严重不足。 TurnItIn声称已经抓取并索引了120亿页。谷歌的索引更像是[编辑]。 MySQL或者任何RDBMS都无法扩展到那个级别。
你将能够把这事办成唯一现实的办法是,如果你做一些令人惊讶的聪明,并找出如何构建查询,谷歌将揭示的是已经出现在谷歌的索引文件剽窃。我建议使用消息队列并同步访问搜索API。消息队列还允许您将查询限制在合理的速率。避免使用停用词,但您仍然在寻找接近完全匹配的内容,因此查询应该是:"* quick brown fox jumped over * lazy dog"
不要打扰运行最终的查询:"* * went * * *"
并忽略返回的结果94,000,000次点击。那些不会是抄袭,它们将是着名的引言或过于笼统的问题。您正在寻找不到10次点击或几千次点击,这些点击都与原始句子或类似指标完全匹配。即便如此,这应该只是一种启发式 - 除非有很多危险信号,否则不要标记文档。相反,如果一切都以零点击回归,那么它们就会变得非常原始。书籍搜索通常需要更精确的查询。足够可疑的东西应该触发对原始页面的HTTP请求,最终的决定应该始终是人类的权限。如果一个文件引用它的来源,那不是抄袭,你会想要发现它。假阳性是不可避免的,如果不是不变的话,可能会很常见。
请注意,服务条款禁止永久存储Google索引的任何部分。
无论如何,无论你如何构建它,你都选择做一些非常努力的事情,除非你涉及谷歌,否则你可能会非常昂贵和耗时。
答案 1 :(得分:1)
1)制作自己的网络抓取工具?看起来您可以轻松地使用所有可用时间来完成此任务。尝试使用标准解决方案:它不是您计划的核心。
您仍然有机会自己制作或尝试另一个(如果您还有时间!)。 您的程序应仅适用于本地文件,以免与特定的爬虫/ API绑定。
也许您甚至不得不为不同的网站使用不同的抓取工具
2)散列整段是可能的。你可以只散列任何字符串。 但当然这意味着你只能检查完全复制的整个paragrpahs。 也许句子是一个更好的测试单位。 您可能应该在散列之前对句子/ paragrpah进行“规范化”(转换)以排除小写差异,例如大写/小写。
3)MySQL可以存储大量数据。
通常的建议是:坚持使用标准SQL。如果您发现数据太多,您仍然可以使用其他SQL实现。
但是当然如果你有太多的数据,首先要看看减少它的方法,或者至少减少mySQL中的内容。例如,您可以在MySQL中存储哈希,但在普通文件中存储原始页面(如果需要)。
答案 2 :(得分:0)
在线代码通常在OpenSource许可下分发。大多数代码只是教程。根据你的逻辑,从任何网站复制任何东西都是抄袭。这意味着你不能接受和使用你在这里得到的任何答案。如果你真的想完成你的项目,只需编写一个系统,比较同一班级和以前班级的学生的代码。效率更高。这种系统的一个例子是MOSS(还有一篇论文谈论它是如何工作的)。没有任何网络抓取工具,这件事非常有效。