作业代码链接
可执行 jar 包已放在学号文件夹下
作业需求:
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
- 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
- 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
- 从**命令行参数**给出:论文原文的文件的**绝对路径**。
- 从**命令行参数**给出:抄袭版论文的文件的**绝对路径**。
- 从**命令行参数**给出:输出的答案文件的**绝对路径**。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输的答案为浮点型,精确到小数点后两位
PSP 表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 |
40 |
· Estimate |
· 估计这个任务需要多少时间 |
40 |
40 |
Development |
开发 |
500 |
500 |
· Analysis |
· 需求分析 (包括学习新技术) |
150 |
150 |
· Design Spec |
· 生成设计文档 |
40 |
40 |
· Design Review |
· 设计复审 |
20 |
30 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
40 |
30 |
· Design |
· 具体设计 |
30 |
30 |
· Coding |
· 具体编码 |
200 |
220 |
· Code Review |
· 代码复审 |
30 |
20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
90 |
Reporting |
报告 |
60 |
60 |
· Test Repor |
· 测试报告 |
30 |
30 |
· Size Measurement |
· 计算工作量 |
15 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
20 |
|
· 合计 |
590 |
600 |
实现步骤
主要设计过程
本次设计主要参考了余弦相似算法,其主要的实现原理在链接中:余弦相似性
余弦相似算法的主要实现过程为:
- 对读入的文本进行分词操作,此处主要运用了 ikAnalyzer 工具包
- 列出所有的词汇
- 对所有词计算词频
- 根据词频,运用余弦相似性计算出重复率
算法分析
计算主要运用了这个公式,当算出来的数值越大,代表相似度越高,反而如果算出来的数值越小,相似度越小
程序结构
程序运行流程:
- 通过 IO 流读入用户在控制台输入的三个文件路径
- 把文本转化为 String 类型并进行分词操作,然后压入 List 中
- 历遍 List ,把每一个词语作为 key 放入 HashMap 中,每当出现重复,对应的 value 加一,以此计算每个词语的词频
- 用余弦相似性算法算出重复率,并把重复率写到第三个文件路径中
测试代码:
主要类:
TextProcessor类:
个人总结:
- 由于基础不好,故项目完成得并不是很好,还有不少瑕疵
- 本次项目也让我体会到了实操的重要性,以后还是要多加打码
- 无他,唯有加油