203
社区成员
发帖
与我相关
我的任务
分享
这个作业属于哪个课程 | 广工软件工程课程学习社区 |
---|---|
这个作业要求 | 个人项目作业-论文查重 |
这个作业的目标 | 1.学习PSP表格的制作 2.编码完成论文查重算法的需求 3.学习对工程文件的性能分析、内存分析、单元测试 4.学习用github管理代码文件 |
github地址 | 仓库 |
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
1.读写txt文件(原论文与抄袭版论文)
2.运用simhash+海明距离算法计算文本相似度
3.将相似度以浮点型(精确到小数点后两位)输入到答案文件中
4.异常处理
参考:Java 简单论文查重程序(SimHash+海明距离算法)
存放main方法调用其他方法。
读取对应文件,调用getSimHash方法得出SimHash值,再计算出海明距离和相似度;将相似度写入文件;退出程序。
用于计算SimHash值。
使用MD5获得传入的String类型字符串的Hash值,并以字符串形式返回。
计算SimHash值,并以字符串形式输出。
计算海明距离,并利用海明距离计算相似度,其公式为1-海明距离/128。
调用Java.io包提供的接口,实现txt文件的读写。
处理异常。
利用样例中的五个“抄袭”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);
}
测试结果:
测试计算两个文本的海明距离和相似度并输出。
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 70 |
Development | 开发 | 610 | 720 |
· Analysis | · 需求分析 (包括学习新技术) | 90 | 120 |
· Design Spec | · 生成设计文档 | 30 | 50 |
· Design Review | · 设计复审 | 30 | 60 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 40 | 30 |
· Design | · 具体设计 | 120 | 90 |
· Coding | · 具体编码 | 500 | 800 |
· Code Review | · 代码复审 | 30 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 90 |
Reporting | 报告 | 100 | 110 |
· Test Report | · 测试报告 | 40 | 60 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 90 |
合计 | 1750 | 2400 |