个人项目
这个作业属于哪个课程 | 班级链接 |
---|---|
这个作业要求在哪里 | 作业链接 |
这个作业的目标 | 设计一个论文查重算法,给出一个原文文件和一个在这份原文 上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。 |
Github链接:点击此处
PSP表格
PSP2.1 | Personal Software Peocess Stages |
预估时间 (分钟) |
实际耗时 (分钟) |
---|---|---|---|
Planning | 计划 | 60 | 60 |
* Estimate | * 估计这个任务需要多少时间 | 60 | 60 |
Development | 开发 | 720 | 625 |
* Analysls | * 需求分析(包括学习新技能) | 120 | 145 |
* Design Spec | * 生成设计文档 | 60 | 30 |
* Design Review | * 设计复审 | 30 | 45 |
* Coding Standard | * 代码规范(为目前的开发制定合适的规范) | 60 | 30 |
* Design | * 具体设计 | 120 | 130 |
* Coding | * 具体编码 | 150 | 100 |
* Coding Review | * 代码复审 | 60 | 45 |
* Test | * 测试(自我测试、修改代码、提交修改) | 120 | 100 |
Reporting | 报告 | 150 | 60 |
* Test Report | * 测试报告 | 60 | 30 |
* Size Measurement | * 计算工作量 | 30 | 15 |
* Postmortem & Process Improvement Plan |
* 事后总结,并提出过程改进计划 | 60 | 15 |
合计 | 930 | 745 |
需求分析
需求:
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
分析:
设计一个论文查重算法,通过对原文和抄袭版论文进行比对,输出重复率
可以使用余弦相似度来实现
实现思路
- 分词:对需要比较的文本进行分词,获得词和词频(key/num)
- 使用已有工具库:目前,常用流行的以及分次效果好的工具库包括:jieba、HanLP、LTP、FudanNLP等
- 统计:统计所有的词,作为向量的维度
- 构建:以词作为维度,词频作为当前维度的值,构建向量。没有的以0填充
- 计算:
具体设计
测试样例
- orig.txt与orig_0.8_add.txt进行比对
命令行:
重复率:
答案文件输出:
- orig.txt与orig_0.8_del.txt进行比对
命令行:
重复率:
答案文件输出:
- orig.txt与orig_0.8_dis_1.txt进行比对
命令行:
重复率:
答案文件输出:
- orig.txt与orig_0.8_dis_10.txt进行比对
命令行:
重复率:
答案文件输出:
- orig.txt与orig_0.8_dis_15.txt进行比对
命令行:
重复率:
答案文件输出:
异常处理说明
- 命令行未给出文件路径:
- 命令行读取的文件不存在
总结:
本次个人项目使用了Maven工具进行Java项目的开发,通过余弦相似度进行论文的比对,通过以词为维度,词频作为量来
对比两篇文字同一词汇出现的次数来计算重复率,但如果两篇文章使用的词相似,词的位置差距较大,则会被鉴定为抄袭
,因此使用余弦相似法具有一定的误差。