标题: 使用java实现简易论文查重


表头:

课程地址 [广东工业大学-软件工程-计科21级12班] https://edu.cnblogs.com/campus/gdgy/CSGrade21-12
作业要求 https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014
作业目标 了解论文查重机理; Git与GitHub的链接使用;

1.代码仓库

https://github.com/wcng010/wcng010


2.PSP表格

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

3.计算模块接口实现和实现过程


实现目标:模拟实现论文查重功能


实现流程:

  • 1.通过IO功能读取txt文件中的信息生成字符串。
  • 2.使用StandardTokenizer.segment对读取的字符串进行分词操作(定义字符串中每个词的词性)。
  • 3.使用SimHash算法,对分词后的字符串进行权重对比,计算出两文的海明距离。
  • 4.最后通过海明距离得出查重比。

核心算法:SimHash的实现

  • 1.对需要比较的文本进行分词,提取特征向量,并对特征向量进行权重(weight)设置。
  • 2.通过hash函数计算各个特征向量的hash值。hash值为二进制数0 1 组成的n-bit签名。
  • 3.在hash值的基础上,给所有特征向量进行加权,即 W = Hash * weight ,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。
  • 4.将各个特征向量的加权结果累加,变成一个序列串。
  • 5.对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值。
  • 6.最后根据不同语句simhash的海明距离来判断它们的相似度。

模块分析:

  • IO模块:

  • 相似度计算模块:


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

内存分析图:

由上图可知,int类型和字典占据了绝大多数内存,前者是由于传入的文本被转化为特征的向量和导致,后者是超频词的设置(需要记录所有词出现次数)。


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


IO模块测试:


计算模块测试:


主模块测试


主程序测试


代码覆盖率


6.计算模块部分异常处理说明:

  • 处理输入错误:

  • IO异常处理:

  • 处理计算错误:
posted on 2023-09-15 13:56  wcng010  阅读(50)  评论(0)    收藏  举报