第一次个人编程作业——论文查重

发布时间 2023-09-17 23:31:18作者: seven_7777

软件工程 计科21级12班
作业要求 个人项目
作业目标 学会java建立项目的过程,了解论文查重系统的实现算法,学会计算性能并提高代码性能
github链接 github地址

PSP

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

题目描述

  • 题目:
    论文查重
  • 描述如下:
    设计一个论文查重算法,给出一个原文文件和一个在这份文件上经过增删改的论文的文件,在答案文件中输出其重复率(相似度)

算法实现流程图设计

aa

关键算法的原理

bbb

计算模块部分的设计与实现

1. 模块设计

ccc

ddd

2.函数与方法介绍

函数与方法 作用
main函数 首先检查传入的命令行参数是否包含了原文文件路径、抄袭版论文文件路径和答案文件路径。如果参数个数小于3,则输出错误提示信息并返回,再调用其他函数
readFile(String filePath) 从文件中读取文本内容的方法
calculateSimilarity(String text1, String text2) 计算相似度的方法
writeResult(String filePath, double similarity) 将结果写入文件的方法

3.算法的实现过程

  • 检查传入的命令行参数是否包含了原文文件路径、抄袭版论文文件路径和答案文件路径。如果参数个数小于3,则输出错误提示信息并返回
  • 从对应的命令行中获取对应文件的路径
  • 将获取到的路径作为参数传给readFile方法获取文本内容
  • 将获取到的文件的文本内容传给calculateSimilarity方法计算两个文件的相似度
  • 将得到的结果调用writeResult方法写入到答案文件中,并给出相应的提示信息

计算模块接口的部分性能改进

1.性能测试工具:JProfiler
2.性能分析图:
eee
ddd
fff

计算模块部分单元测试展示

主类测试

点击查看主类测试的具体代码
public static void main(String[] args) {
        if (args.length < 3) {
            System.out.println("请提供原文文件、抄袭版论文文件和答案文件的路径!");
            return;
        }

        String originalFile = args[0]; // 获取原文文件路径
        String plagiarizedFile = args[1]; // 获取抄袭版论文文件路径
        String answerFile = args[2]; // 获取答案文件路径

        try {
            String originalText = readFile(originalFile); // 从原文文件中读取文本内容
            String plagiarizedText = readFile(plagiarizedFile); // 从抄袭版论文文件中读取文本内容

            double similarity = calculateSimilarity(originalText, plagiarizedText); // 计算相似度

            writeResult(answerFile, similarity); // 将相似度结果写入答案文件
            System.out.println("相似度计算完成!请在对应的结果文件中查看计算结果"); // 输出计算完成的提示信息
        } catch (IOException e) {
            System.out.println("发生错误:" + e.getMessage()); // 输出错误信息
        }
    }

主类测试的覆盖率
qqq

在命令运行main.jar进行测试

  1. 检查orig_0.8_add.txt

ttt

  1. 结果:

rrr

  1. 所有文件的测试结果
文件 相似度
orig_0.8_add.txt 0.99
orig_0.8_del.txt 0.40
orig_0.8_dis_1.txt 0.41
orig_0.8_dis_10.txt 0.41
orig_0.8_dis_15.txt 0.41

计算模块部分异常处理说明

对IOException e错误进行异常捕捉

www

报错提示

  • 运行命令行没有指定三个文件绝对路径:

hhh

  • 指定的文件不存在:

eee