论文查重

课程地址 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的实现
  1. 分词(使用了hankcs包)

  2. 获取hash值

  3. 加权、合并

  4. 降维

计算模块接口部分的性能分析

模块部分单元测试展示

  • 测试覆盖率


  • 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 来处理这个异常
  • 测试结果
posted @ 2023-09-16 23:59  喋喋不休123  阅读(36)  评论(0)    收藏  举报