第一次个人编程作业
Github仓库:https://github.com/XiaonanLin/XiaonanLin/tree/main/3123004448
| 这个作业属于哪个课程 | 班级链接 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 按流程实现一个论文查重项目、熟悉程序优化及开发规范化、熟悉Github使用 |
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| · Planning | · 计划 | 30 | 40 |
| · Estimate | · 估计这个任务需要多少时间 | 350 | 460 |
| · Development | · 开发 | 200 | 175 |
| · Analysis | · 需求分析 (包括学习新技术) | 20 | 45 |
| · Design Spec | · 生成设计文档 | 10 | 15 |
| · Design Review | · 设计复审 | 5 | 5 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 3 | 3 |
| · Design | · 具体设计 | 20 | 20 |
| · Coding | · 具体编码 | 60 | 75 |
| · Code Review | · 代码复审 | 15 | 20 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 20 | 30 |
| · Reporting | · 报告 | 120 | 125 |
| · Test Repor | · 测试报告 | 30 | 50 |
| · Size Measurement | · 计算工作量 | 35 | 25 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 30 |
| · 合计 | 588 | 603 |
计算模块接口的设计与实现过程
- 首先确定用余弦相似度的计算作为计算文本相似度的方法,将总的计算过程分为“读取文件”、“分词”、“统计字符频率”、“计算相似度”、“写入文件”。
- 用StringBuilder、BuffedReader、InputStreamReader、FileInputStream实现读取文件,用PrintWriter、OutputStreamWriter、FileOutputStream实现写入文件
- 用HanLP分词器实现分词
- 用Map存储各词的频度,计算频度时使用遍历
- 实现求余弦相似度公式来计算文本相似度
流程图:

算法关键:
- 使用了HanLP分词器进行分词,有效将文本切分为独立语义单位,并去掉影响结果的空格
- 使用求余弦相似度的公式计算文本相似度
性能分析
性能分析图:

由于HanLP分词器的缘故无法对其进行进一步优化,只能对空间使用最大的int[]部分进行优化
单元测试
-
测试覆盖率
![]()
-
文件读取、写入测试
![]()
思路:创建不存在的路径,读取写入时应会抛出异常 -
分词测试
![]()
思路:给出带有空格并隔开独立语义单位,测试时应会去掉空格和将文本切分为独立语义单位 -
计算字符频率测试
![]()
-
计算文本相似度测试
![]()
-
总测试
![]()
异常处理
- 读取、写入异常
![]()







浙公网安备 33010602011771号