论文查重

这个作业属于哪个课程 计科国际班软工
这个作业要求在哪里 要求
这个作业的目标 论文查重程序
1.GitHub地址: https://github.com/a-sk768/3119009435
2.PSP表格
PSP2.1 Personal Software Process Stages
--------------------------------------- --------------------------------
Planning 计划
· Estimate · 估计这个任务需要多少时间
Development 开发
· Analysis · 需求分析 (包括学习新技术)
· Design Spec · 生成设计文档
· Design Review · 设计复审
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)
· Design · 具体设计
· Coding · 具体编码
· Code Review · 代码复审
· Test · 测试(自我测试,修改代码,提交修改)
Reporting 报告
· Test Repor · 测试报告
· Size Measurement · 计算工作量
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划
Sum up 合计
3.计算模块接口的设计与实现过程:
此次论文查重我以余弦相似度实现。
我使用hanlp进行分词及关键字提取,kmp算法计算关键词数量,并以快速排序和链表数据结构进行辅助计算。
故至少需要以下模块:
1.输入输出模块
2.分词及关键词提取模块
3.计算关键词数量模块
4.计算余弦值模块
程序的函数嵌套顺序以模块标号按从小到大进行
其中,3、4模块在最后被我合并为一个计算模块,此外加入了一些用以辅助计算的类,类中有且只有一个静态方法。
(注:关键词提取部分的函数目前正在构建,故先调用工具辅助进行,以后有时间commit)
我的工程结构示意图:

Libraries:

4 性能测试
JProfiler运行时截图:

可以看到,Java.lang.Float的实例次数最多,这是因为在函数实现的过程中大量调用toString方法。

从这个上面所展示的截图可以看出,在处理文本容量为一万字左右的文件时,该项目计算结果所需时间为679ms,读取数据用了1ms,
为了检查程序在不同性能设备上运行效率 我将电脑置为省电模式,结果为763ms以及2ms。
至于如何改进,思路如下:
将原文分词并去除停用词后放入Map中,之后根据关键词数组遍历Map,遇到相同的,关键词的数量数组对应位置加一(具体实现靠hash算法),直到遍历完成,最终得到表示关键词数量的数组。从时间复杂度来看,假设关键词数量为m,文本容量为n,若用原来的方法,对每一个关键词,均需要遍历一次文本所以最终时间复杂度为O(mn),改进后的算法,只需要遍历一遍文本,所以时间复杂度仅为O(m),最终得到一个线性时间复杂度的算法。
改进后的算法相当于重写一遍这个作业,所以我暂时放弃将其实现,但之前想复杂了,这次以后,我会着重考虑性能分析,在构建代码前仔细思考。(所以说这次算法的设计真的辣鸡)
5 部分代码展示:
1.
1
这里我直接构建一个String,将其转换为char数组,然后传参,通过人工校验确认无误后,测试结束。
2.
2
这里我还是直接构建一个String,将其转换为char数组,然后传参,通过人工校验确认无误后,啪,测试结束。
6.计算模块部分异常处理说明
在输入输出部分的异常处理我是直接使用了Java语言的异常抛出机制,如果遇到文件路径非法或者路径不存在,则会抛出如下
异常:
非法路径:

文件不存在:

文件为空:

posted @ 2021-09-17 00:13  gk_1f6_2ec  阅读(114)  评论(0编辑  收藏  举报