个人第一次编程作业

这个作业属于哪个课程班级链接
这个作业要求在哪里 作业链接
这个作业的目标 论文查重算法设计+学习PSP表格+单元测试+JProfiler性能分析+Git管理

1、代码链接

HHchhhhh/- (github.com)

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、总结

  1. 了解git的使用,以及GitHub的上传

  2. 学习并使用一些求相似度的算法

  3. 学习io流的文件读写操作

  4. 学习在cmd命令行上运行程序

8、参考文章

https://blog.csdn.net/u014539465/article/details/105353638?utm_source=app&app_version=4.15.1



posted @ 2021-09-18 22:04  WowwGH  阅读(68)  评论(0编辑  收藏  举报