第一次个人编程作业

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

计算模块接口的设计与实现过程

  1. 首先确定用余弦相似度的计算作为计算文本相似度的方法,将总的计算过程分为“读取文件”、“分词”、“统计字符频率”、“计算相似度”、“写入文件”。
  2. 用StringBuilder、BuffedReader、InputStreamReader、FileInputStream实现读取文件,用PrintWriter、OutputStreamWriter、FileOutputStream实现写入文件
  3. 用HanLP分词器实现分词
  4. 用Map存储各词的频度,计算频度时使用遍历
  5. 实现求余弦相似度公式来计算文本相似度

流程图:

算法关键:

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

性能分析

性能分析图:

由于HanLP分词器的缘故无法对其进行进一步优化,只能对空间使用最大的int[]部分进行优化

单元测试

  • 测试覆盖率

  • 文件读取、写入测试

    思路:创建不存在的路径,读取写入时应会抛出异常

  • 分词测试

    思路:给出带有空格并隔开独立语义单位,测试时应会去掉空格和将文本切分为独立语义单位

  • 计算字符频率测试

  • 计算文本相似度测试

  • 总测试

异常处理

  • 读取、写入异常
posted @ 2025-03-05 23:21  Sakanaction  阅读(90)  评论(0)    收藏  举报