个人项目

这个作业属于哪个课程 课程链接
这个作业要求在哪里 作业要求
这个作业的目标 学习论文查重算法和工程项目的实现

Github仓库连接

论文查重系统

类与接口设计

  • PaperCheck类,调用该类的paperCheck()方法并传入原文章与抄袭文章得出文章相似度

  • FileUtils类,调用该类的readFile()接口,用于读取文件

  • MergeSortInversePairs类,调用内部方法mergeSort()内部实现对序列归并排序并计算出逆序对

对应的接口调度流程图

graph TD A[命令行参数解析] --> B[参数校验] B --> C{参数合法?} C --> |是| D[读取原文文件] C --> |否| E[输出错误信息] D --> F[读取抄袭版文件] F --> G[文本预处理] G --> H[计算相似度] H --> I[写入结果文件] I --> J[程序结束] E --> J

PSP表格

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

涉及到的核心算法设计

1.读取原文文件和抄袭版论文文件的内容。

2.使用分词器对原文和抄袭版进行分词,并得到各自的分词序列

3.提取原文和抄袭版的公共分词,得到公共分词序列

4.对抄袭版文章的分词序列进行归并排序,并计算逆序对的个数。

5.计算相似度公式:相似度S = (正序对 - 逆序对) / 正序对。

6.将相似度结果写入答案文件。

异常处理

  • 开始运行时判断命令行参数是否符合参数
//检查参数个数
if (args.length != 3){
    System.out.println("参数个数错误或文件路径不正确!\n");
    return;
}

//判断参数文件是否以.txt结尾
for(String index : args){
    if(!index.endsWith(".txt")){
        System.out.println("文件格式错误!\n");
        return;
    }
}
  • 读取文件时判断文件路径是否正确
try {
    double result = check.paperCheck(args[0], args[1], args[2]);
    System.out.printf("%s 文章查重率:%.2f%% \n",args[1],result * 100);
    //将结果result写入args[2]的文件路径中
    writeResultToFile(args[2], result);
} catch (IOException e){
    LOGGER.error("文件打开失败", e);
}

测试结果

性能

  • (采用了Java自带的命令行性能分析工具)

posted @ 2025-03-08 09:43  %GGb  阅读(52)  评论(0)    收藏  举报