脚本宝典收集整理的这篇文章主要介绍了第一次个人编程作业,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
软件工程 | 19级信安12班 |
---|---|
作业要求 | 个人项目作业 |
作业目标 | 论文查重、代码测试、PSP表格、性能分析、GITHub上传、博客总结 |
https://github.COM/zhouhuajuan/3219005498.git
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。 要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。 从命令行参数给出:抄袭版论文的文件的绝对路径。 从命令行参数给出:输出的答案文件的绝对路径。 我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
本项目使用的核心算法是SimHash算法+海明距离。
SimHash也即相似hash,是一类特殊的信息指纹,常用来比较文章的相似度,与传统hash相比,传统hash只负责将原始内容尽量随机的映射为一个特征值,并保证相同的内容一定具有相同的特征值。而且如果两个hash值是相等的,则说明原始数据在一定概率下也是相等的。但通过传统hash来判断文章的内容是否相似是非常困难的,原因在于传统hash只唯一标明了其特殊性,并不能作为相似度比较的依据。
(1)分词:对文本进行分词,得到 N 个 词 word1word_1word1,word2word_2word2,word3word_3word3 …… wordnword_nwordn;
(2)赋权重:对文本进行词频统计,为各个词设置合理的权重 weight1weight_1weight1,weight2weight_2weight2,weight3weight_3weight3 …… weightnweight_nweightn;
(3)哈希:计算每个分词的哈希值 hashihash_ihashi,得到一个定长的二进制序列,一般是 64 位,也可以是 128 位;
(4)加权重:变换每个分词 wordiword_iwordi 的 hashihash_ihashi,将 1 变成正的权重值 weightiweight_iweighti,0 变成 −weighti-weight_i−weighti,得到一个新的序列 weightHashiweightHash_iweightHashi;
(5)叠加权重:对每个 weightHashiweightHash_iweightHashi 各个位上的数值做累加,最终得到一个序列 lastHashlastHashlastHash,序列的每一位都是所有分词的权重的累加值;
(6)降维:再将 lastHashlastHashlastHash 变换成 01 序列 simHash ,方法是:权重值大于零的位置设置为 1,小于 0 的位置设置为 0,它就是整个文本的局部哈希值,即指纹。
分词,有 hanlp 分词、IKAnalyzer 分词 和 word 分词等工具可以用; 权重,为各个分词赋上合理的权重,可以自定义统计算法,也可以借助 word 的词频统计; 哈希算法,这个可以自己选择,也可以用现有的算法,如 Murmur 哈希,JDK 的 hash 。
流程图为:
汉明距离是以理查德·卫斯里·汉明的名字命名的。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。从其定义上来看,就是二进制序列异或计算时相异为1,异或的结果中1的总数,就是两个字符串的汉明距离,所以实现汉明距离计算的方法也很简单。
SimHash算法参考材料
代码
测试结果
代码
测试结果
测试覆盖率
代码
测试结果
测试覆盖率
代码
测试结果
测试覆盖率
代码
@H_862_304@
测试结果
测试覆盖率
PSP2.1 | PErsonal Software PRocess Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 45 | 60 |
EstiMATE | 估计这个任务需要多少时间 | 80 | 97 |
Development | 开发 | 45 | 67 |
Analysis | 需求分析(包括学习新技术) | 5 | 5 |
Design Spec | 生成设计文档 | 2 | 2 |
Design review | 设计复审 | 15 | 20 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 5 | 4 |
Coding | 具体编码 | 40 | 60 |
Code Review | 代码复审 | 30 | 76 |
Test | 测试(自我测试,修改代码,提交修改) | 28 | 44 |
Reporting | 报告 | 30 | 65 |
Test Repor | 测试报告 | 25 | 40 |
Size Measurement | 计算工作量 | 10 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 21 |
合计 | 390 | 586 |
以上是脚本宝典为你收集整理的第一次个人编程作业全部内容,希望文章能够帮你解决第一次个人编程作业所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。