软工作业2:论文查重(python)
| 软件工程 | 计科21级12班 |
|---|---|
| 作业要求 | 个人项目 |
| 目标 | 实现个人软件开发的流程 |
Part1 PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 20 |
| Estimate | 估计这个任务需要多少时间 | 25 | 25 |
| Development | 开发 | 100 | 120 |
| Analysis | 需求分析(包括学习新技术) | 30 | 40 |
| Design Spec | 生成设计文档 | 30 | 20 |
| Design Review | 设计复审 | 20 | 10 |
| Coding Standard | 代码规范(为目前的开发制定合适的规范) | 20 | 20 |
| Design | 具体设计 | 40 | 50 |
| Coding | 具体代码 | 40 | 40 |
| Code Review | 代码复审 | 20 | 20 |
| Test | 测试(自我测试,修改代码,提交修改) | 40 | 40 |
| Reporting | 报告 | 40 | 30 |
| Test Repor | 测试报告 | 30 | 30 |
| Size Measurement | 计算工作量 | 20 | 15 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 15 | 15 |
Part2 具体需求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
Part3 项目设计
3.1 算法原理
3.1.1 Longest Common Subsequence (LCS)算法
该算法找出两个文本之间最长的公共子序列,这有助于检测被重写但仍然具有大量原始内容的文章。LCS 是一个经典的问题,通常使用动态规划来解决。对于重复率,我们可以将其定义为LCS长度与两篇文章长度的平均值的比率。这样,重复率可以更好地反映两篇文章的相似性。其计算公式如下:
3.1.2 Jaccard相似度
Jaccard相似度是一种用于衡量两个集合之间相似程度的统计指标,通常用于集合或文档之间的相似性比较。它基于集合的元素之间的交集和并集的概念,用于确定两个集合的共享成员比例。Jaccard相似度的计算公式如下:
3.2 接口的设计与实现过程
原文和抄袭文章之间区别部分展示


- 导入必要的库和模块。
- 数据处理,首先观察数据类型发现其为中文文档,需要利用相关的语料库将其进行文本分词。
- 函数编写,然后确定使用的算法类型,编写其函数式为其准备需要的数据情况。
- 文件导入,通过绝对路径输入需要比对的文件,输出比对结果存入文件中。
- 观察代码性能,尝试优化。
3.3 接口部分的性能改进
3.3.1改进前
最初选择了LCS算法,经过实验后发现其运行时间达到23秒

通过性能显示图可以看出来,由于测试文本过于长,导致其计算花费了太多时间。经过查询资料得知LCS算法在处理大型文本时可能效率较低,文本越长,LCS算法的计算复杂度越高,耗费的时间也就越长。才会导致运行时间达到了20秒以上。

3.3.2 改进后
改进后将计算算法改为Jaccard相似度,其具有的优点是:
- 稳健性:Jaccard相似度对于数据中的噪声和异常值相对稳健,因为它主要关注数据的存在与否,而不关心具体数值。
- 可解释性:Jaccard相似度的结果是在0到1之间的值,易于解释和比较。值越接近1,表示相似度越高,值越接近0,表示相似度越低。
- 无需考虑数据大小:Jaccard相似度不受数据集大小的影响。它只关心元素是否存在于集合中,而不关心元素的具体数量。
改进后程序运行时间被大大缩短,证明其算法的有效性。


3.4 单元测试展示
结果展示:
| 比对文件 | 相似度 |
|---|---|
| orig_0.8_add | 0.42 |
| orig_0.8_del | 0.26 |
| orig_0.8_dis_1 | 0.36 |
| orig_0.8_dis_10 | 0.27 |
| orig_0.8_dis_15 | 0.19 |
特殊测试数据:

结果:


浙公网安备 33010602011771号