192
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 广工软件工程课程学习社区 |
|---|---|
| 这个作业要求在哪里 | 个人项目作业-论文查重 |
| 这个作业的目标 | 1.学习PSP表格的制作 2.编码完成论文查重算法的需求 3.学习对工程文件的性能分析、内存分析、单元测试 4.学习用gitcode管理代码文件 |
| gitcode地址 | https://gitcode.net/ojl1037753538/3121005003 |
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 18 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 18 |
| Development | 开发 | 610 | 720 |
| · Analysis | · 需求分析 (包括学习新技术) | 90 | 120 |
| · Design Spec | · 生成设计文档 | 30 | 50 |
| · Design Review | · 设计复审 | 30 | 30 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 40 | 30 |
| · Design | · 具体设计 | 120 | 90 |
| · Coding | · 具体编码 | 240 | 300 |
| · Code Review | · 代码复审 | 30 | 40 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 | 90 |
| Reporting | 报告 | 100 | 110 |
| · Test Report | · 测试报告 | 40 | 60 |
| · Size Measurement | · 计算工作量 | 20 | 20 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 30 |
| 合计 | 760 | 878 |
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
1.读写txt文件(原论文与抄袭版论文)
2.运用simhash+海明距离算法计算文本相似度
3.将相似度以浮点型(精确到小数点后两位)输入到答案文件中
4.异常处理
项目结构


方法:
1.利用Hanlp分词
2.将每一个分词hash为一组固定长度的数列
3.建立一个长度为128的整数数组
4.最后对数组进行判断,大于0的记为1,小于等于0的记为0,得到一个128位的simhash值.
hash:计算关键词的Hash值
hammingDistance:对两个文档的simhash值每一位进行异或运算,计算海明距离
getSemblance:利用海明距离计算重复率
readString:文件读取
MainPaperCheck类
存放main方法调用其他方法。
读取对应文件,将文件内容转化为字符串形式;调用getSimHash方法得出SimHash值,再计算出海明距离和相似度;将相似度以浮点型小数写入指定文件;退出程 序。
SimHashUtils类
用于计算SimHash值。
getHash方法
使用MD5获得传入的String类型字符串的Hash值,并以字符串形式返回。
getSImHash方法
计算SimHash值,并以字符串形式输出。
HammingUtils类
计算海明距离,并利用海明距离计算相似度,其公式为1-海明距离/128。
TxtOUtils类
调用Java.io包提供的接口,实现txt文件的读写。
ShortStringException类
处理异常。
测试代码
@Test
public void addTest(){
String origin="C:\\Users\\Administrator\\IdeaProjects\\3120004815paper\\src\\main\\resources\\orig.txt";
String test= "C:\\Users\\Administrator\\IdeaProjects\\3120004815paper\\src\\main\\resources\\orig_0.8_dis_15.txt";
SimHash hash1 = new SimHash(SimHash.readString(origin), 128);
SimHash hash2 = new SimHash(SimHash.readString(test), 128);
//海明值计算
System.out.println("海明距离值:"+hash1.hammingDistance(hash2));
//相似率值
System.out.println("相似率:"+hash1.getSemblance(hash2));
}
五个例子
👍👍