个人项目:查重系统

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

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

PSP表格

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

思路
打算先从目标文本中读取文件,将文件转换为字符串类型存储在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抛出异常。且输入文件路径的格式出错时也会报错

posted @ 2024-03-12 23:07  erjeor  阅读(44)  评论(0编辑  收藏  举报