个人项目-Python实现论文查重

发布时间 2023-09-20 02:32:57作者: wsyfine

项目Github地址:https://github.com/wsyfine/wsyfine/tree/main/202121331014

作业要求:

这个作业属于哪个课程 工程概论
作业要求 作业要求链接
作业目标 Github项目管理,熟悉项目开发过程

需求分析:

题目:论文查重

描述如下:

设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:

命令行参数给出:论文原文的文件的绝对路径
命令行参数给出:抄袭版论文的文件的绝对路径
命令行参数给出:输出的答案文件的绝对路径
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。

注意:答案文件中输出的答案为浮点型,精确到小数点后两位

PSP表格:

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 20
Estimate 估计这个任务需要多少时间 5 5
Development 开发 70 60
Analysis 需求分析 (包括学习新技术) 10 10
Design Spec 生成设计文档 10 8
Design Review 设计复审 10 2
Coding Standard 代码规范 10 10
Design 具体设计 10 10
Coding 具体编码 10 10
Code Review 代码复审 15 2
Test 测试 10 8
Reporting 报告 20 20
Test Repor 测试报告 15 10
Size Measurement 计算工作量 10 10
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 5 5
合计 240 190

算法设计:

使用余弦相似度赛算法

  1. 分词:使用jieba库对原始文本和抄袭版文本进行分词,将文本切分为一个个独立的词语,为了将文本转换为可以进行词频统计的形式。

  2. 构建词频统计:使用Counter库对分词结果进行词频统计,分别统计原始文本和抄袭版文本中每个词出现的次数。

  3. 计算余弦相似度:

    • 寻找词频统计的交集:找出原始文本和抄袭版文本中共同出现的词汇,即交集。
    • 计算分子:遍历交集中的词汇,分别获取原始文本和抄袭版文本中对应词汇的词频,并将它们相乘后求和,作为余弦相似度的分子。
    • 计算分母:分别计算原始文本和抄袭版文本中各自词频的平方和,并对其开根号。将这两个值相乘,得到余弦相似度的分母。
    • 计算相似度得分:将分子除以分母,得到余弦相似度的得分。
  4. 返回相似度得分:将计算得到的相似度得分乘以100,以百分比形式表示。表示两个文本之间的相似度。

开发环境:

操作系统:Windows11
IDE:Pycharm2022.3.1
Python版本:3.11

运行:

Pycharm
image

cmd
image

文件情况
image

性能分析:

image

image

异常处理:

image

image