这个作业属于哪个课程 | 软工4班 |
---|---|
这个给作业要求在哪里 | 作业的要求 |
这个作业的目标 | 实现论文查重 |
一、GitHub链接
https://github.com/weilong181/weilong181
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 46 |
-Estimate | -估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 500 | 524 |
-Analysis | -需求分析 (包括学习新技术) | 100 | 156 |
-Design Spec | -生成设计文档 | 20 | 15 |
-Design Review | -设计复审 | 10 | 10 |
-Coding Standard | -代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
-Design | -具体设计 | 60 | 55 |
-Coding | -具体编码 | 150 | 140 |
-Code Review | -代码复审 | 20 | 20 |
-Test | -测试(自我测试,修改代码,提交修改) | 20 | 30 |
Reporting | 报告 | 30 | 30 |
-Test Repor | -测试报告 | 15 | 15 |
-Size Measurement | -计算工作量 | 10 | 15 |
-Postmortem & Process Improvement Plan | -事后总结, 并提出过程改进计划 | 10 | 10 |
All | 合计 | 1020 | 1081 |
三、接口设计及实现过程
SimhashDuplicateDetector 类:
-
功能:这个类是一个用于检测文本重复的工具。它使用 Simhash 算法来生成文本的 Simhash 值,并计算两个文本之间的相似度。它还提供了方法来读取文件内容、计算文本相似度,并将结果写入文件。
-
方法和属性:tokenizer: 一个分词器对象,用于将文本分词。
-
calculateSimhash(String text): 计算给定文本的 Simhash 值。
-
hammingDistance(long hash1, long hash2): 计算两个 Simhash 值之间的 Hamming 距离。
-
calculateDuplicateRate(String text1, String text2): 计算两个文本之间的重复率。
-
main(String[] args): 主方法,用于执行重复检测并将结果输出到文件。
-
readFileContent(String filePath): 从文件中读取文本内容。
-
writeToFile(String filePath, String content): 将内容写入文件。
Tokenizer 类:
- 功能:这个类是一个简单的分词器,用于将文本分成单词或者词语。在示例中,它只是简单地根据空格进行分词,但在实际应用中,可能会使用更复杂的分词算法。
- 方法和属性:tokenize(String text): 将给定的文本按照空格进行分词,并返回分词后的结果数组。
MurmurHash类
- 用于计算字符串的 hash 值。
四、性能图
五、单元测试
test1~test5依次为orig文件与add,del,del_1,del_10,del_15进行
-
test1
-
test2
-
test3
-
test4
-
test5
六、异常说明
输入文件不存在时: