软件工程第二次作业

该文描述了一个使用Java17和IntellijIDEA开发的论文查重算法,基于N-gram(此处为5-gram)序列来计算原文和抄袭版论文的相似度。程序通过命令行参数接收输入文件,并使用JUnit进行单元测试,JProfiler进行性能分析。测试结果显示不同篡改程度的论文重复率在0.16至0.81之间。
摘要由CSDN通过智能技术生成

gitCode 仓库地址:Xiao_Long666gg / 3121005319 · GitCode

这个作业属于哪个课程广工23软件工程社区
这个作业要求在哪里个人项目作业-论文查重
这个作业的目标设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率
其他文献参考


 开发环境

  • 编译语言:Java 17
  • IDE:Intellij IDEA 2021.3.2
  • 单元测试:JUnit 4.12
  • 性能分析工具:JProfiler 9.2

流程设计

 

需求

题目:论文查重

描述如下:

设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

  • 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。

  • 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。

要求输入输出采用文件输入输出,规范如下:

  • 命令行参数给出:论文原文的文件的绝对路径

  • 命令行参数给出:抄袭版论文的文件的绝对路径

  • 命令行参数给出:输出的答案文件的绝对路径

我们提供一份样例( 提取码:oogi),使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。

注意:答案文件中输出的答案为浮点型,精确到小数点后两位

PSP表格

*PSP2.1**Personal Software Process Stages*预估耗时(分钟)实际耗时(分钟)
Planning计划3030
· Estimate· 估计这个任务需要多少时间1010
Development开发120150
· Analysis· 需求分析 (包括学习新技术)5040
· Design Spec· 生成设计文档4040
· Design Review· 设计复审2020
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)105
· Design· 具体设计2015
· Coding· 具体编码150160
· Code Review· 代码复审2030
· Test· 测试(自我测试,修改代码,提交修改)2025
Reporting报告1530
· Test Repor· 测试报告1215
· Size Measurement· 计算工作量2515
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划1520
· 合计650715

代码解释

  • 代码结构

  • readFile方法读取文本文件的内容并将其作为字符串返回。

  • splitString方法生成给定长度的N-gram序列。在这里,我们选择N = 5,但可以根据需要更改。

  • calculate方法计算原始文本和抄袭版文本之间的相似度。首先,我们生成原始文本和抄袭版文本的N-gram序列。接下来,我们计算在原始文本中找到的N-gram在抄袭版文本中是否存在。最后,我们将找到的匹配数量除以原始文本的N-gram总数,以获得相似度得分。

public static double calculate(String originalText, String modifiedText){
    int totalSame=0;
    ArrayList<String> originItems=splitString(originalText,5);//修改前的子串
    ArrayList<String> modifiedItems=splitString(modifiedText,5);//修改后的字串
    for (String originItem:originItems) {
        if (modifiedItems.contains(originItem)){//原文子串和修改后的字串做对比
            totalSame++;
        }
    }
return (double) totalSame/originItems.size();
}
  • main方法是程序的入口点。它接受两个参数:原始文件名和抄袭版文件名。它使用上述三个方法来计算原始文件和抄袭版文件之间的相似度,然后输出相似度得分。

  • test 为测试用类

性能分析

本算法就是把一篇一篇文本分成一小段的字符串,所以字符数组占用的内存回偏多

此外calulate方法为最耗时的方法

测试及异常处理

针对该程序,可以设计以下测试用例:

  1. 测试读取文件功能

  • 测试文件存在且可以被成功读取

  • 测试文件不存在或者读取失败的情况

代码覆盖率

测试结果

orig_0.8_add.txt对比的重复率为0.48

orig_0.8_del.txt对比的重复率为0.37

orig_0.8_dis_1.txt对比的重复率为0.81

orig_0.8_dis_10.txt对比的重复率为0.55

orig_0.8_dis_15.txt对比的重复率为0.16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值