作业所属班级 软件工程2024
作业要求 查重系统
作业目标 实现论文查重

该项目的GitHub仓库链接
本系统采用scanner输入器输入文本路径和查重文本路径,最后控制台输出查重率

PSP表格

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

思路
打算先从目标文本中读取文件,将文件转换为字符串类型存储在List中,最后在通过算法实现查重比对

1.接口设计

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class FileToString {

    public String fileToString(String File) throws IOException {


        String paperContent = FileUtils.readFileToString(new File(File), "UTF-8");
        return paperContent;
    }
}

通过此方法输入两个文本路径

 public String preprocess(String content) {
        // TODO: 实现论文内容的预处理操作
        return  return content.replaceAll("[\\p{Punct}]", "");
    }

通过此方法接收文本,并且采用正则表达式进行去除标点符号的操作

点击查看代码

 public double calculateSimilarity(String paperContent, String databaseContent) {
        JaccardSimilarity js=new JaccardSimilarity();
        return js.apply(paperContent, databaseContent);
    }

使用余弦相似度计算相似度分数 点击查看代码

 public static void main(String[] args) {
        try {
            // 读取待检测的论文内容
            String paperContent = FileUtils.readFileToString(new File("C:/Users/86157/Desktop/orig.txt"), "UTF-8");

            // 读取数据库中的论文内容
            String databaseContent = FileUtils.readFileToString(new File("C:/Users/86157/Desktop/orig_0.8_add.txt"), "UTF-8");

            // 预处理论文内容(例如去除标点符号、停用词等)
            String processedPaperContent = preprocess(paperContent);
            String processedDatabaseContent = preprocess(databaseContent);

            // 计算相似度
            double similarityScore = calculateSimilarity(processedPaperContent, processedDatabaseContent);

            System.out.println(similarityScore);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

最后用主函数开始测试,并用try,catch抓取读取文本地址的异常

2.单元测试

点击查看代码

ackage com.example.demo;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class calculateSimilarityTest {
    private calculateSimilarity CalculateSimilarity=new calculateSimilarity();

    @Test
    public void testCalculateSimilarity(){
        double a=CalculateSimilarity.CalculateSimilarity("fadukhu","vihauhkl");
        System.out.println(a);
    }
}

点击查看代码

package com.example.demo;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class preprocessTest {
    private preprocess pr=new preprocess();

    @Test
    public void testpreprocess(){
        String a=pr.preprocess("GAFILHJ,VIUDALJ...");
        System.out.println(a);
    }

}

点击查看代码

import java.io.IOException;
import java.util.Scanner;

import com.example.demo.calculateSimilarity;
import com.example.demo.preprocess;


public class search {
    public static void main(String[] args) {
        try {
            // 读取待检测的论文内容
            System.out.println("请输入文件路径");
            Scanner sc=new Scanner(System.in);
            String paperContents= sc.next();

            System.out.println("请输入查重文件路径");
            String databaseContents=sc.next();

            FileToString file=new FileToString();

            String paperContent=file.fileToString(paperContents);
            String databaseContent= file.fileToString(databaseContents);
            // 读取数据库中的论文内容


            preprocess Preprocess = new preprocess();
            calculateSimilarity CalculateSimilarity=new calculateSimilarity();
            // 预处理论文内容(例如去除标点符号、停用词等)
            String processedPaperContent = Preprocess.preprocess(paperContent);
            String processedDatabaseContent = Preprocess.preprocess(databaseContent);

            // 计算相似度
            double similarityScore = CalculateSimilarity.CalculateSimilarity(processedPaperContent, processedDatabaseContent);

            System.out.println(similarityScore);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总代码

3.异常处理
主要异常来源于文件读取,用throw抛出异常。且输入文件路径的格式出错时也会报错

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。