第一次个人编程作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12 | 
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014 | 
| 这个作业的目标 | 完成个人项目:论文查重;学会写单元测试 | 
github连接:https://github.com/CaCO3X/3121004870

一、PSP表格
| PSP2.1 | Personal Software Process Stage | 预估耗时(分钟) | 实际耗时(分钟) | 
|---|---|---|---|
| Planning | 计划 | 60 | 90 | 
| Estimate | 估计这个任务需要多少时间 | 120 | 150 | 
| Development | 开发 | 300 | 360 | 
| Analysis | 需求分析(包括学习新技术) | 45 | 60 | 
| Design Spec | 生成设计文档 | 60 | 90 | 
| Design Standard | 设计复审 | 20 | 30 | 
| Design | 具体设计 | 45 | 60 | 
| Coding | 具体代码 | 45 | 60 | 
| Code Review | 代码复审 | 20 | 30 | 
| Test | 测试()自我测试,修改代码,提交修改 | 30 | 45 | 
| Reporting | 报告 | 60 | 90 | 
| Test Report | 测试报告 | 45 | 60 | 
| Siza Measurement | 计算工作量 | 10 | 10 | 
| Postmortem & Process & Improvement Plan | 事后总结,并提交过程改进计划 | 15 | 30 | 
| 合计 | 875 | 1165 | 
二、设计与开发
编码规范:阿里巴巴开发规范插件
2.1开发环境
-操作系统:windows
-编程语言:jdk 1.8
2.2开发工具
-maven包管理工具
-idea:IDEA2020.3.1
-性能分析工具:JProfiler14.0
2.3项目依赖
-commons-math jar包:用于提供处理余弦向量之间的计算
-hanlp-portable jar包:用于处理文本中中文词语的匹配,并转化为相应的相应的向量
2.4算法设计说明
1.采用余弦相似度算法来计算两文本间的余弦相似度来近似代替两文本之间的文章相似度
2.该算法是基于中文词库,将两文本中的内容转化为向量形式,接着再计算这两向量的余弦相似度来近似代替文章相似度
3.余弦相似度公式:余弦相似度 = (向量1 · 向量2) / (||向量1|| * ||向量2||),其中,向量1 · 向量2 表示向量的点积, ||向量1|| 和 ||向量2|| 表示向量的模
4.余弦相似度范围是0-1,越接近1表示两文本之间越相似,既文章相似度越高
5.独到之处:能较为简单的判断文章之间的大致相似程度,且代码实现较为简单,占用的内存和CPU都不大
2.5接口设计与实现过程

2.5.1整个项目的代码都在CosineSimilarity这一个类中,这个类的最主要功能是:计算余弦相似度,用余弦相似度近似代替文章相似度,越接近1文章间越相似
CosineSimilarity类的组成是由以下的函数实现的:
1.String readFileToString(String filePath)函数:以字符串形式从文件中将文本内容读到程序中
2.RealVector getVector(String text, List
3.double getCosineSimilarity(RealVector vector1, RealVector vector2)函数:将得到的词向量用于计算文本间的余弦相似度
4.void main(String[] args)函数:用于将得到的文本来测试,并得到答案
2.5.2两个额外下载的jar包
1.commons-math jar包:用于提供处理余弦向量之间的计算
2.hanlp-portable jar包:用于处理文本中中文词语的匹配,并转化为相应的相应的向量
2.5.3以.txt结尾的文件
这些文件是用于测试的文本
三、测试与性能分析
3.1测试
整个CosineSimilarity类的测试部分只有main函数的测试部分
3.1.1CosineSimilarity测试
main函数代码:

3.1.2覆盖率

3.1.3测试结果

3.2性能分析
3.2.1Override(总)

内存:

GC活动:

类:

CPU负载:

3.2.2Memory

可以看出LinkList类和Float类占用的比较多,这是由于进行中文分词时加载过滤词集合以及进行计算余弦相似度时产生的
四、异常说明
1.读取文件时错误

2.文件读取输出错误

                    
                
                
            
        
浙公网安备 33010602011771号