个人项目
班级链接 | 19网34 |
---|---|
作业要求 | 作业要求 |
作业目标 | 完成一个查重程序 |
一.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟 |
---|---|---|---|
Planning | 计划 | ||
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 300 | 360 |
Design Spec | 生成设计文档 | ||
Design Review | 设计复审 | 30 | 20 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
Design | 具体设计 | 40 | 60 |
Coding | 具体编码 | 150 | 180 |
Code Review | 代码复审 | 30 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 40 | 20 |
Reporting | 报告 | ||
· Test Repor | 测试报告 | 60 | 90 |
Size Measurement | 计算工作量 | 30 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 | 720 | 830 |
二.模块接口的设计与实现
1.主要的类
主类:
Main:包含main方法,接收命令行输入的参数,调用其他工具类来执行程序。
工具类:
FileIO:文件工具类。控制文件的读写以及获取文件名。
Hamming:计算海明距离的工具类。计算两个hash值的海明距离以及根据海明距离计算其相似度。
HashCompute:计算hash值的工具类。计算每个单词、整个文本、的hash值。
测试类:
test:测试主类和工具类是否可以正常使用
2.程序算法的关键几步
1.分词:对需要比较的文本进行分词,提取特征向量。并对特征向量,进行权重(weight)设置。
2.求hash: 通过hash函数计算各个特征向量的hash值。hash值为二进制数0 1 组成的n-bit签名。
3.加权:在hash值的基础上,给所有特征向量进行加权,即W = Hash * weight,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。
4.合并:将上述各个特征向量的加权结果累加,变成只有一个序列串。拿前两个特征向量举例。
5.降维:对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值,最后我们便可以根据不同语句simhash的海 明距离来判断它们的相似度。
6.计算:通过Simhash签名值,计算汉明距离。
三.模块接口部分的性能改进
用的较多的是比特流
四.模块部分单元测试展示
测试文件工具类
五.模块部分异常
输入文件路径不存在发生异常
六.原文件与抄袭文件相似度