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

黄宇峰 2022-09-22 19:40:41
这个作业属于哪个课程广工软件工程课程学习社区
这个作业要求个人项目作业-论文查重
这个作业的目标1.学习PSP表格的制作
2.编码完成论文查重算法的需求
3.学习对工程文件的性能分析、内存分析、单元测试
4.学习用github管理代码文件
github地址仓库

目录

  • 1.需求
  • 1.1题目
  • 1.2分析
  • 2.开发环境
  • 2.1结构
  • 2.2总体设计
  • 3.代码实现及设计
  • 3.0 核心算法
  • 3.1 MainPaperCheck类
  • 3.2 SimHashUtils类
  • 3.2.1 getHash方法
  • 3.2.2 getSImHash方法
  • 3.3 HammingUtils类
  • 3.4 TxtOUtils类
  • 3.5 ShortStringException类
  • 4.测试
  • 4.1性能分析
  • 4.2模块测试
  • 4.2.1 MainTest
  • 5.PSP表格

1.需求

1.1题目

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

原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:

从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。

1.2分析

1.读写txt文件(原论文与抄袭版论文)

2.运用simhash+海明距离算法计算文本相似度

3.将相似度以浮点型(精确到小数点后两位)输入到答案文件中

4.异常处理

2.开发环境

  • 编程语言:Java
  • IDE:IntelliJ IDEA Community Edition 2022.2.2
  • 性能分析工具:JProfiler
  • 依赖的外部jar包:

    img

参考:Java 简单论文查重程序(SimHash+海明距离算法)

2.1结构

img

2.2总体设计

img

3.代码实现及设计

3.0 核心算法

img

原理

3.1 MainPaperCheck类

存放main方法调用其他方法。

读取对应文件,调用getSimHash方法得出SimHash值,再计算出海明距离和相似度;将相似度写入文件;退出程序。

3.2 SimHashUtils类

用于计算SimHash值。

3.2.1 getHash方法

使用MD5获得传入的String类型字符串的Hash值,并以字符串形式返回。

3.2.2 getSImHash方法

计算SimHash值,并以字符串形式输出。

3.3 HammingUtils类

计算海明距离,并利用海明距离计算相似度,其公式为1-海明距离/128。

3.4 TxtOUtils类

调用Java.io包提供的接口,实现txt文件的读写。

3.5 ShortStringException类

处理异常。

4.测试

4.1性能分析

img

4.2模块测试

4.2.1 MainTest

利用样例中的五个“抄袭”txt与原版txt进行相似度测试,分别得出它们与原版的相似度并输入到指定txt中。

异常处理:原版txt与自身进行相似度测试,最终结果为1(即完全一致)。

部分测试代码如下:

public void origAndAllTest(){
    String[] str = new String[6];
    str[0] = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig.txt");
    str[1] = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig_0.8_add.txt");
    str[2] = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig_0.8_del.txt");
    str[3] = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig_0.8_dis_1.txt");
    str[4] = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig_0.8_dis_10.txt");
    str[5] = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig_0.8_dis_15.txt");
    String ansFileName = "C:/Users/28765/JAVA/test/ansAll.txt";
    for(int i = 0; i <= 5; i++){
        double ans = HammingUtils.getSimilarity(SimHashUtils.getSimHash(str[0]), SimHashUtils.getSimHash(str[i]));
        TxtIOUtils.writeTxt(ans, ansFileName);
    }
}
@Test
    public void origAndOrigTest(){
        String str0 = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig.txt");
        String str1 = TxtIOUtils.readTxt("C:/Users/28765/JAVA/test/orig.txt");
        String ansFileName = "C:/28765/JAVA/Desktop/test/ansOrigAndOrigTest.txt";
        double ans = HammingUtils.getSimilarity(SimHashUtils.getSimHash(str0), SimHashUtils.getSimHash(str1));
        TxtIOUtils.writeTxt(ans, ansFileName);
    }

测试结果:

img

测试计算两个文本的海明距离和相似度并输出。

img

img

5.PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2030
· Estimate· 估计这个任务需要多少时间2070
Development开发610720
· Analysis· 需求分析 (包括学习新技术)90120
· Design Spec· 生成设计文档3050
· Design Review· 设计复审3060
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)4030
· Design· 具体设计12090
· Coding· 具体编码500800
· Code Review· 代码复审3060
· Test· 测试(自我测试,修改代码,提交修改)6090
Reporting报告100110
· Test Report· 测试报告4060
· Size Measurement· 计算工作量2020
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划4090
合计17502400
...全文
82 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

203

社区成员

发帖
与我相关
我的任务
社区描述
高校教学社区
其他 高校 广东省·广州市
社区管理员
  • ryue.zh
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧