采用Java实现论文查重

这个作业属于哪个课程 <软件工程2024 (广东工业大学)>
这个作业要求在哪里 <个人项目>
这个作业的目标 <熟悉个人软件开发流程、熟悉各类工具的使用,学会用PSPG进行项目规划评估程序质量并优化程序>

一、PHP表格

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

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

2.1实现查重的核心算法
  • simHsh
    simHash也称为相似hash,是一种特殊的信息指纹,常用来比较文章的相似度。主要步骤如下:
    • 通过特征将文本分词;
    • 再通过hash算法获取每个词的hash值;
    • 接着通过hash生成结果,需要按照单词的权重形成加权数字串;
    • 然后把上面各个单词算出来的序列值累加,合并成一个序列串;
    • 最后降维得到simHash签名;
  • 海明距离
    • 将不同文本最终转换的两个simHash值对比,差异的位数即为“海明距离”

参考链接

2.2类的设计
类名 功能
txtOIUtil 读写txt文件操作
simHashUtil 计算simHash
HammingUtil 计算两个simHash值的海明距离
shortStringException 处理文本过短异常
2.3 工具包的使用
  • TokenizeEngine,根据用户引入的分词库的jar来自动选择用哪个库实现分词
解析文本并分词
//自动根据用户引入的分词库的jar来自动选择使用的引擎
TokenizerEngine engine = TokenizerUtil.createEngine();
//解析文本
String text = "这两个方法的区别在于返回值";
Result result = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
  • hanLp汉语言工具包

三、计算模块接口部分的性能改进

3.1 JProflier性能分析

3.2 消耗最大的函数


由于项目有大量对文章的文字进行权重以及通过hash算法获取文字hash值的操作,因此结合上图我们可以看到Float类以及hankcs汉语包所占内存较高。

四、计算模块部分单元测试展示

4.1 测试类模块
  • 测试类模块
  • 测试结果
  • 测试类覆盖率

五、计算模块部分异常处理说明

文本过短时,需要使用shortStringException来抛出异常。

结果如下:

posted @ 2024-03-12 21:45  2231353895  阅读(144)  评论(0编辑  收藏  举报