第一次个人编程作业

这次作业属于那个课程 软件工程
这个作业要求在哪里 作业要求的链接
这次作业的目标 论文查重

1、GitHub 地址

2、PSP 表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 35
Estimate 估计这个任务需要多少时间 30 35
Development 开发 300 350
Analysis 需求分析 (包括学习新技术) 20 20
Design Spec 生成设计文档 30 38
Design Review 设计复审 15 20
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 40
Design 具体设计 30 45
Coding 具体编码 400 430
Code Review 代码复审 60 60
Test 测试(自我测试,修改代码,提交修改) 60 80
Reporting 报告 45 60
Test Repor 测试报告 20 20
Size Measurement 计算工作量 15 15
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 20
合计 1115 1268

3、模块接口的设计和实现过程

3.1 读写文本文件

  • 类名:FileUtils;
  • 将 txt 文本文件读取到 StringBuilder 进行拼接,返回调用 simHash() 方法

3.2 核心算法 SimHash、汉明距离

3.2.1 概述

  • SimHash 主要思想是降维,将高维的特征向量映射成低维的特征向量,通过两个向量的 Hamming Distance (汉明距离)确定文章是否高度相似。
  • Hamming Distance (汉明距离),两个字符串之间的汉明距离是两个字符对应位置的不同字符的个数。

3.2.2 实现流程

  • 分词:对需要的文本分词,得到有效的特征向量,将标点、换行、空格等过滤掉,减少无关次的影响。
  • hash:通过使用了 MD5 获得字符串的 hash 值 获得各分词的 hash 值,hash 是二进制字符串 。
  • 合并:加权求和,W = Hash * weight ,逢1加1,逢0减1.直到把所有的分词hash数列全部判断完毕,计算文档特征向量和。
  • 降维:最后对数组进行判断,大于0的记为1,小于等于0的记为0,得到语句的 simhash 值
  • 计算:将得到的 simhash 值调用汉明距离模块,计算两二进制字符串的对应位的不同位数,进行计算两字符串的汉明距离,得出相似度。

3.2.3 流程图

3.3 异常类

  • 自定义异常类 EmptyTxtException ,当输入文本为空时,即抛出异常告知用户

4、计算模块接口部分的性能改进

4.1 性能分析

  • Overview

  • 方法调用情况

5、单元测试

5.1 测试读取 txt 文本

  • 测试读取文件方法

  • 测试写入文件方法

  • 文件路径错误,读取失败

  • 文件路径错误,写入失败

  • 代码覆盖率

5.2 测试 simHash 算法

  • 测试 SimHash 算法是否正常运行

  • 代码覆盖率

5.3 测试 Hamming Distance

  • 测试海明距离算法代码是否正常运行

  • 测试过去文件的 simHash 值

  • 代码覆盖率

5.4 主程序测试

  • 运行结果

  • 代码覆盖率

6、异常处理

6.1 文本为空异常处理

  • 自定义异常,当输入文本为空时,则抛出异常

6.1 测试异常类

  • 运行结果

  • 代码覆盖率

posted @ 2021-09-18 22:00  HEI001  阅读(448)  评论(0)    收藏  举报