个人项目—论文查重
个人项目-论文查重
| 这个作业所属课程 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 https://github.com/linkaiyao-web/lky |
|---|---|
| 作业要求 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146 |
| 这个作业的目标 | 学会编写代码进行论文查重,并能够使用Git工具上传文件,熟练使用PSP表格 |
一、GitHub仓库
GitHub地址: https://github.com/linkaiyao-web/lky
二、PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 24 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 24 |
| Development | 开发 | 475 | 480 |
| · Analysis | · 需求分析 (包括学习新技术) | 30 | 35 |
| · Design Spec | · 生成设计文档 | 60 | 60 |
| · Design Review | · 设计复审 | 65 | 70 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 20 |
| · Design | · 具体设计 | 30 | 35 |
| · Coding | · 具体编码 | 190 | 200 |
| · Code Review | · 代码复审 | 60 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 25 | 25 |
| Reporting | 报告 | 60 | 60 |
| · Test Repor | · 测试报告 | 30 | 30 |
| · Size Measurement | · 计算工作量 | 10 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
| . Total | · 合计 | 555 | 564 |
三、论文查重算法
参考资料:https://blog.csdn.net/lengye7/article/details/79789206
1.0 算法原理
来自于GoogleMoses Charikar发表的一篇论文“detecting near-duplicates for web crawling”中提出了simhash算法,专门用来解决亿万级别的网页的去重任务。
simhash作为locality sensitive hash(局部敏感哈希)的一种:
其主要思想是降维,将高维的特征向量映射成低维的特征向量,通过两个向量的Hamming Distance来确定文章是否重复或者高度近似。
其中,Hamming Distance,又称汉明距离,在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。
也就是说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:1011101 与 1001001 之间的汉明距离是 2。
至于我们常说的字符串编辑距离则是一般形式的汉明距离。
如此,通过比较多个文档的simHash值的海明距离,可以获取它们的相似度。
2.0 算法流程
simhash算法分为5个步骤:分词、hash、加权、合并、降维,具体过程如下所述:.分词
给定一段语句,进行分词,得到有效的特征向量,然后为每一个特征向量设置1-5等5个级别的权重(如果是给定一个文本,那么
特征向量可以是文本中的词,其权重可以是这个词出现的次数)。例如给定一段语句:“CSDN博客结构之法算法之道的作者July”,分词
后为:“CSDN 博客 结构 之 法 算法 之 道 的 作者 July”,然后为每个特征向量赋予权值:CSDN(4) 博客(5) 结构(3) 之(1) 法(2)
算法(3) 之(1) 道(2) 的(1) 作者(5) July(5),其中括号里的数字代表这个单词在整条语句中的重要程度,数字越大代表越重要。
.hash
通过hash函数计算各个特征向量的hash值,hash值为二进制数01组成的n-bit签名。比如“CSDN”的hash值Hash(CSDN)为100101,
“博客”的hash值Hash(博客)为“101011”。就这样,字符串就变成了一系列数字。
.加权
.在hash值的基础上,给所有特征向量进行加权,即W = Hash * weight,且遇到1则hash值和权值正相乘,遇到0则hash值和权值
负相乘。例如给“CSDN”的hash值“100101”加权得到:W(CSDN) = 100101 4 = 4 -4 -4 4 -4 4,给“博客”的hash值“101011”加权得
到:W(博客)=101011 5 = 5 -5 5 -5 5 5,其余特征向量类似此般操作。
.合并
.将上述各个特征向量的加权结果累加,变成只有一个序列串。拿前两个特征向量举例,例如“CSDN”的“4 -4 -4 4 -4 4”和“博客”
的“5 -5 5 -5 5 5”进行累加,得到“4+5 -4+-5 -4+5 4+-5 -4+5 4+5”,得到“9 -9 1 -1 1”。
.降维
.对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值,最后我们便可以根据不同语句simhash的
海明距离来判断它们的相似度。例如把上面计算出来的“9 -9 1 -1 1 9”降维(某位大于0记为1,小于0记为0),得到的01串为:“1 0
1 0 1 1”,从而形成它们的simhash签名。

四、计算模块接口的设计与实现过程

五、计算模块接口部分的性能改进
.
六、单元测试
单元测试代码覆盖率:

测试抄袭文本:
.
.
.
.
.
测试空文本:

测试不相关文本:

当路径出现错误时:

浙公网安备 33010602011771号