这个作业属于哪个课程 | 计科国际班软工 |
这个作业要求在哪里 | 要求 |
这个作业的目标 | 论文查重程序 |
1.GitHub地址:(https://github.com/L-Cc26/3119009428)
2.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 0.25 | 0.167 |
Estimate | 估计这个任务需要多少时间 | 0.25 | 0.154 |
Development | 开发 | 72 | 75 |
Analysis | 需求分析 (包括学习新技术) | 48 | 50 |
Design Spec | 生成设计文档 | 2 | 3 |
Design Review | 设计复审 | 1 | 2 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 1 | 2 |
Design | 具体设计 | 3 | 4 |
Coding | 具体编码 | 12 | 12 |
Code Review | 代码复审 | 2 | 2 |
Test | 测试(自我测试,修改代码,提交修改) | 3 | 1 |
Reporting | 报告 | 2.5 | 2.5 |
Test Repor | 测试报告 | 0.5 | 0.5 |
Size Measurement | 计算工作量 | 1 | 1.5 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 1 | 1 |
Sum up | 合计 | 75 | 82.541 |
3.计算模块接口的设计与实现过程:
流程图
通过查找网上的资料,找到解决查重的关键算法,利用TF-IDF与余弦相似性的应用,主要说的是离用余弦相似性来比较两个句子的相似性,
我们这里同样可以运用到文章上面,主要是用位置向量分析每个词全文的分布,从而分析两篇文章的相似度。用到的是hanlp分词。
然后遍历存放着词与词频信息的map,计算cos值。最后比对得出答案。
文件读写类,分词与计算类,异常类分别如下
引用了里面的FileReader,然后对异常进行了封装
引入了TokenizerEngine,并通过hankcs当作引擎来进行分词处理。
4.部分代码展示与测试:
测试分别从两个完全相同的文件和完全不同的文件,到5个测试用例去测试。
同时也测试了假如文件路径有问题和文件为空,也考虑到了各种异常的情况。
覆盖率:
总方法覆盖率为77%,line覆盖率达到了93%
结果:
orig_0.8_add.txt 0.8695990639733713
orig_0.8_del.txt 0.7498838191640381
orig_0.8_dis_1.txt 0.9206491294709916
orig_0.8_dis_10.txt 0.804067893296461
orig_0.8_dis_15.txt 0.6575365154781483
5.计算模块接口部分的性能
速度很快就完成了测试3s。
反思:可以优化的地方还有很多,比如简化输入路径,如输入名字即可找到文件,加快程序总运行速度。
还有一个问题,假如有两个句子,遍历只遍历到了第一个句子有的词。第二个句子有的词但第一个句子没有的词,并不会加入到计算中。
这样是采用位置向量的缺陷,以后可以改进。