脚本宝典收集整理的这篇文章主要介绍了第一次个人编程作业,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
软件工程 | 网工1934-软件工程 (广东工业大学 - 计算机学院) |
---|---|
作业要求 | 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率 |
作业目标 | 1.在GIThub仓库中新建一个学号为名的文件夹。2.在开始实现程序之前,在PSP表格记录估计在程序开发各个步骤上耗费的时间,在实现程序之后,在PSP表格记录在程序的各个模块上实际花费的时间。3.使用C++ 、Java语言或者python3实现,提交python代码时请附带上requirements.txt,C++请使用Visual Studio CommUnity 2017进行开发,运行环境为64-bit Windows 10。对于C++/Java,还需将编译好的程序发布到Github仓库中的releases中。4.提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。5.完成项目的首个版本之后,请使用性能分析工具Studio PRofiling Tools来找出代码中的性能瓶颈并进行改进。5.使用Github来管理源代码和测试用例,代码有进展即签入Github。6.使用单元测试对项目进行测试,并使用插件查看测试分支覆盖率等指标;写出至少10个测试用例确保你的程序能够正确处理各种情况。 |
PSP2.1 | PErsonal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· EstiMATE | · 估计这个任务需要多少时间 | 720 | 740 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 240 | 180 |
· Design Spec | · 生成设计文档 | 40 | 30 |
· Design review | · 设计复审 | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
· Design | · 具体设计 | 60 | 50 |
· Coding | · 具体编码 | 180 | 240 |
· Code Review | · 代码复审 | 60 | 100 |
· test | · 测试(自我测试,修改代码,提交修改) | 40 | 30 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 30 | 40 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 | 720 | 740 |
PaperCheck 类
是main方法所在的类,可调用其他类的静态方法实现需求
IO 类
实现读写功能的类
SimHash 类
计算 SimHash 值的类
Hamming 类
计算海明距离与重复率的类
SimHash算法分为五步
一、分词
把需要判断的文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重,我们假设权重分为5个级别(1~5)。比如:“美国“51区”雇员称内部有9架飞碟,曾看见灰色外星人 ” ==> 分词后为“美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾(1) 看见(3) 灰色(4) 外星人(5)”,括号里是代表单词在整个句子里重要程度,数字越大越重要。
二、Hash
通过 Hash 算法把每个词变成 Hash 值,比如“美国”通过 Hash 算法计算为 1 0 0 1 0 1 ,“51区”通过 Hash 算法计算为 1 0 1 0 1 1 。这次我使用了 MD5 形成 Hash 值。
三、加权
通过步骤 2 的生成结果,需要按照单词的权重形成加权数字串,比如“美国”的 Hash 值为 1 0 0 1 0 1 ,通过加权计算为 4 -4 -4 4 -4 4 ,“51区”的 Hash 值为 1 0 1 0 1 1 ,通过加权计算为 5 -5 5 -5 5 5 。
四、合并
把上面各个单词算出来的序列值累加,变成只有一个序列串。比如“美国”的 4 -4 -4 4 -4 4 ,“51区”的 5 -5 5 -5 5 5 , 把每一位进行累加,4+5 -4+-5 -4+5 4+-5 -4+5 4+5 ==> 9 -9 1 -1 1 9 。
五、降维
把步骤 4 算出来的 9 -9 1 -1 1 9 变成 0 1 串,形成我们最终的SimHash签名。 如果每一位大于 0 记为 1 ,小于 0 记为 0 。最后算出结果为:1 0 1 0 1 1 。
而海明距离则是比较两个 SimHash 值差异的位数,通过比较差异的位数就可以得到两串文本的差异,通常认为海明距离<3的是高度相似的文本。
测试结果
测试结果
@H_932_304@
测试结果
测试结果
有些异常未发生,catch代码未运行,故未能全覆盖
错误报告
以上是脚本宝典为你收集整理的第一次个人编程作业全部内容,希望文章能够帮你解决第一次个人编程作业所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。