个人项目:论文查重

2021/9/18 23:09:00

本文主要是介绍个人项目:论文查重,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

作业所属课程 https://edu.cnblogs.com/campus/gdgy/InformationSecurity1912-Softwareengineering
作业要求 https://edu.cnblogs.com/campus/gdgy/InformationSecurity1912-Softwareengineering/homework/12146
这个作业的目标 实现论文查重算法,学习使用PSP表格,学习使用性能分析工具和代码质量检测工具

1.Github仓库

https://github.com/long0724/3119005420

2.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 35
Estimate 估计这个任务需要多少时间 20 20
Development 开发 300 360
Analysis 需求分析 (包括学习新技术) 40 40
Design Spec 生成设计文档 60 50
Design Review 设计复审 30 30
Coding Standard 代码规范 (为目前的开发制定合适的规范) 15 20
Design 具体设计 30 45
Coding 具体编码 230 270
Code Review 代码复审 30 45
Test 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 60 70
Test Repor 测试报告 20 30
Size Measurement 计算工作量 10 15
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 45
合计 935 1105

3.计算模块接口的设计与实现过程

1.代码如何组织

项目结构

2.类之间的关系

类PaperCheckMain:该类包含主函数main方法。

类IoUtils:包含read和write方法,对txt文件进行读取和写入操作。

类CalSimHashUtil:getHash函数通过调用byte2str和hexStrToBinaryStr函数实现将每一个字符转为二进制字符串,返回该二进制字符串。getSimHash函数通过调用getHash函数来计算simhash。

类CalHamDistanceUtil:用已经计算的simhash来计算海明距离。

类CalSimilarity:通过海明距离计算两个文本的相似度,得出最后结果。

3.算法的关键

算法使用的是Simhash算法:
算法参考文档:https://blog.csdn.net/lance_yan/article/details/10304747

算法的关键之处:
首先使用Hanlp中的extractKeyword提取出关键字(HanLP是一系列模型与算法组成的NLP工具包),然后对每一个关键字进行MD5加密处理(实例化一个MessageDigest对象,通过提供的静态的getInstance方法),使其返回字节数组,然后再将字节数组中字节先转为十六进制的字符串,最后转为二进制字符串,得出每个关键字的对应的二进制字符串。
然后simhash函数再遍历扫描每个关键字的二进制字符串,分别进行加权计算,最后再将加权计算的结果进行降维,得出每一篇文章对应的128位二进制字符串,最后根据两篇文章的二进制字符串求海明距离,进而求出两篇文章的相似度。

4.计算模块接口部分的性能改进

1)消除所有警告和错误

2)使用JProfier分析性能

概览

实时内存

手动GC后

堆遍历器

大部分时间花在分词上(调用Hanlp)

花费时间最多的函数

5.计算模块部分单元测试展示

1)代码覆盖率

2)测试代码

AllTest
该类测试原文件与被检测文件的查重率,并看能否正常输出

测试结果

AddTest
该类测试原文件与orig_0.8_add.txt

测试结果

(原文件与其他校验文件的检测类似,仅需修改文件路径)

getHammingDistanceTest
该类测试海明距离

测试结果

getHashTest
该类测试每个关键字的hash值计算

测试结果

(当某个关键字为空时返回null)

CalSimilarityTest
该类测试两篇文章的相似度

测试结果

getSimHashTest
该类计算两篇文章对应的simhash

测试结果

ReadTrueTest
该类实现对txt文件的读取

测试结果

WriteTrueTest
该类将字符串写入到txt文件中

测试结果(将字符串“666.66”写入txt文件)

6.异常处理

1)从文件中读取字符串和写入字符串时,如果文件地址不正确,就会产生异常

读取错误处理

读取异常测试

测试结果

写入错误处理

写入异常测试

测试结果



这篇关于个人项目:论文查重的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程