论文查重
| 课程地址 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12 |
|---|---|
| 作业要求 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014 |
| 作业目标 | 设计实现论文查重;学习实践单元测试;熟悉对博客的使用 |
Github
PSP表
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 90 |
| Estimate | 估计这个任务需要多少时间 | 30 | 30 |
| Development | 开发 | 600 | 420 |
| Analysis | 需求分析 (包括学习新技术) | 200 | 100 |
| Design Spec | 生成设计文档 | 50 | 30 |
| Design Review | 设计复审 | 10 | 30 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
| Design | 具体设计 | 60 | 90 |
| Coding | 具体编码 | 240 | 220 |
| Code Review | 代码复审 | 30 | 60 |
| Test | 测试(自我测试,修改代码,提交修改) | 180 | 240 |
| Reporting | 报告 | 60 | 30 |
| Test Repor | 测试报告 | 60 | 50 |
| Size Measurement | 计算工作量 | 60 | 60 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 90 |
| 合计 | 1720 | 1570 |
计算模块接口的设计与实现过程
- 接口设计
![]()
- 关键算法getSimHash的实现
![]()
-
分词(使用了hankcs包)
![]()
-
获取hash值
![]()
-
加权、合并
![]()
-
降维
![]()
计算模块接口部分的性能分析


模块部分单元测试展示
-
测试覆盖率
![]()
![]()
![]()
-
HammingUtils类
package com.azhu.utils;
import org.junit.Test;
public class HammingUtilsTest {
@Test
public void getHammingDistanceTest() {
String str0 = TxtIOUtils.readTxt("E:/IntelliJ IDEA Community Edition 2023.1.1/java_works/PaperCheck1/src/main/resources/testTxt/orig.txt");
String str1 = TxtIOUtils.readTxt("E:/IntelliJ IDEA Community Edition 2023.1.1/java_works/PaperCheck1/src/main/resources/testTxt/orig_0.8_add.txt");
int distance = HammingUtils.getHammingDistance(SimHashUtils.getSimHash(str0), SimHashUtils.getSimHash(str1));
System.out.println("海明距离:" + distance);
System.out.println("相似度: " + (100 - distance * 100 / 128) + "%");
}
@Test
public void getHammingDistanceFailTest() {
// 测试str0.length()!=str1.length()的情况
String str0 = "10101010";
String str1 = "1010101";
System.out.println(HammingUtils.getHammingDistance(str0, str1));
}
@Test
public void getSimilarityTest() {
String str0 = TxtIOUtils.readTxt("E:/IntelliJ IDEA Community Edition 2023.1.1/java_works/PaperCheck1/src/main/resources/testTxt/orig.txt");
String str1 = TxtIOUtils.readTxt("E:/IntelliJ IDEA Community Edition 2023.1.1/java_works/PaperCheck1/src/main/resources/testTxt/orig_0.8_add.txt");
int distance = HammingUtils.getHammingDistance(SimHashUtils.getSimHash(str0), SimHashUtils.getSimHash(str1));
double similarity = HammingUtils.getSimilarity(SimHashUtils.getSimHash(str0), SimHashUtils.getSimHash(str1));
System.out.println("str0和str1的汉明距离: " + distance);
System.out.println("str0和str1的相似度:" + similarity);
}
}
计算模块部分异常处理说明
- 当文本长度过短时,HanLp无法取得关键字。此时需要说明异常情况
![]()
- 设计了一个类:ShortStringException 来处理这个异常
![]()
- 测试结果
![]()












浙公网安备 33010602011771号