软件工程 | 19网工34 |
---|---|
作业要求 | 作业要求 |
作业目标 | 设计论文查重算法,github代码管理,测试代码 |
计算模块接口的设计与实现过程
文件读写类
文件读写类封装了读入和写出的方法.
分词类
分词类中封装了读取词库的类,以及读取论文中词语的类
获取词向量类
封装了获取词向量的类
计算查重率的类
计算出余弦相似度作为查重率
程序流程
实现逻辑
通过查找网上的资料,查到可以使用余弦相似度来作为查重的依据,主要参考TF-IDF与余弦相似性的应用
利用余弦相似度可以计算两个句子的相似性,同理我们可以类比到整个文章。所以我们需要做的第一步是进行分词,并统计词频。但是这里用的是位置向量分析。主要思路是,每一个词在全文的分布大概是如何的,从宏观上来分析两篇文章的相似度。这里我用到的是hanlp分词。然后遍历存放着词与词频信息的map,计算cos值。最后比对得出答案。
注意
这里有一个点需要注意的是分词之后统计的时候还需要对字符char进行判断,值判断汉字。[\u4e00-\u9fa5]
异常
结果
性能测试
char 和 String 占用了最多的内存 因为遍历论文和比对时创建了很多。
psp
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 90 | 120 |
· Estimate | · 估计这个任务需要多少时间 | 720 | 720 |
Development | 开发 | 480 | 640 |
· Analysis | · 需求分析 (包括学习新技术) | 350 | 200 |
· Design Spec | · 生成设计文档 | 50 | 75 |
· Design Review | · 设计复审 | 60 | 80 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 60 |
· Design | · 具体设计 | 150 | 100 |
· Coding | · 具体编码 | 80 | 120 |
· Code Review | · 代码复审 | 100 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | 120 |
Reporting | 报告 | 60 | 60 |
· Test Repor | · 测试报告 | 30 | 60 |
· Size Measurement | · 计算工作量 | 30 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
· 合计 | 1662 | 1815 |