个人第一次编程作业
这个作业属于哪个课程 | |
---|---|
这个作业要求在哪里 | |
这个作业的目标 | 论文查重算法设计+学习PSP表格+单元测试+JProfiler性能分析+Git管理 |
1、代码链接
2、模块接口的设计与实现过程
2.1、使用余弦定理计算文本相似度
余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度
计算公式
算法思路:
-
先把文本转换成字符串
-
利用hutool引擎进行分词操作并求词频
-
通过词频使用余弦公式求出相似度
2.2、主要的类
在命令行运行程序,输入文件路径,调用file类中的方法读取文件,在countwork中计算词频,将分词后的词与它的词频一同存入map中,返回给similarity计算相似度。
2.3、关键函数
-
public static Map<String, List<Integer>> Countword(String path)
-
分词:利用hutool分词再求词频
-
返回map键值对:将词频存入map中返回
-
-
public static Double Similarity(Map<String, List<Integer>> map1, Map<String, List<Integer>> map2)
-
取出map中的词频存入列表中
-
公式上部分,两个列表中索引位置相同的数相乘
-
公式下部分,列表中数相乘开平方后相加
-
3、计算模块接口部分的性能改进
3.1、CPU
3.2、类占用
3.3、堆内存
3.4、性能改进
-
除了调用api的内存性能,更多能改进的是在算法方面,本次作业采用的是余弦算法,是一种简单的算法,但是这种算法不能计算文本长度太长的文章,若文本长度太长,该算法的效率会大大下降。
4、计算模块部分单元测试展示
4.1、部分测试代码
4.2、代码测试结果
4.3、命令行测试结果
-
传参方法:- Java: java -jar main.jar [原文文件] [抄袭版论文的文件] [答案文件]
4.4、代码覆盖率
5、计算模块部分异常处理说明
6、花费时间
PSP2.1**** | Personal Software Process Stages**** | 预估耗时(分钟)**** | 实际耗时(分钟)**** |
---|---|---|---|
Planning | 计划 | 20 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 50 |
Development | 开发 | 250 | 350 |
· Analysis | · 需求分析 (包括学习新技术) | 140 | 200 |
· Design Spec | · 生成设计文档 | 50 | 50 |
· Design Review | · 设计复审 | 40 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
· Design | · 具体设计 | 90 | 70 |
· Coding | · 具体编码 | 150 | 170 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 50 | 200 |
Reporting | 报告 | 100 | 150 |
· Test Repor | · 测试报告 | 30 | 50 |
· Size Measurement | · 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 60 |
· 合计 | 1060 | 1480 |
7、总结
-
了解git的使用,以及GitHub的上传
-
学习并使用一些求相似度的算法
-
学习io流的文件读写操作
-
学习在cmd命令行上运行程序
8、参考文章
https://blog.csdn.net/u014539465/article/details/105353638?utm_source=app&app_version=4.15.1