首页 > 其他分享 >论文查重之小白都懂

论文查重之小白都懂

时间:2024-03-17 11:33:09浏览次数:24  
标签:查重 10 30 论文 之小白 file 序列 SequenceMatcher

这个作业属于哪个课程 软件工程2024-双学位(广东工业大学)
这个作业要求在哪里 软件工程第二次作业
这个作业的目标 1. 在Gitcode仓库中新建一个学号为名的文件夹
2. 记录PSP表格
3. 使用编程语言完成论文查重程序
4. 使用Code Quality Analysis分析代码
5. 使用Studio Profiling Tools来优化代码
6. 使用Gitcode来管理代码
7. 使用单元测试对项目进行测试,并使用插件查看测试分支覆盖率等指标
其他参考文献

我的GitCode链接 |

目录

论文查重

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 60
·Estimate ·估计这个任务需要多少时间 300 440
Development 开发 60 40
·Analysis ·需求分析(包括学习新技术) 20 20
·Design Spec ·生成设计文档 20 30
·Design Review ·设计复审 10 30
·Coding Standard ·代码规范(为目前的开发制定合适的规范) 10 10
·Design ·具体设计 30 50
·Coding ·具体编码 40 60
·Code Review ·代码复审 10 20
·Test ·测试(自我测试,修改代码,提交修改) 30 50
Reporting 报告 30 30
·TestReport ·测试报告 20 10
·Size Measurement ·计算工作量 10 10
·Postmortem & Process Improvement Plan ·事后总结,提出过程改进计划 10 20
·合计 330 440

论文查询程序设计

首先是编程语言的选择。由于python在数据分析领域已经很成熟,并且数据分析的率也很高,所以综合考虑后,python是最佳选择。
经过查询一些博客,发现python的difflib库非常适合论文查重,所以本博客站在巨人的肩膀上再进行开发。
difflib中常用两个类:SequenceMatcher 和 Differ,它们都可以用来比较两个序列(如字符串、列表、元组等)之间的差异,并生成相应的结果,十分方便。
difflib 库中的 SequenceMatcher 类是 Python 的一个非常有用的工具,用于比较两个序列之间的相似度,找出它们之间最长的连续匹配的子序列。它可以用于比较任何类型的序列(如字符串、列表或元组),非常适合于文本比较和差异分析等场景。以下是 SequenceMatcher 的一些基本使用方法和介绍:

SequenceMatcher基本使用

首先,你需要从 difflib 模块导入 SequenceMatcher 类:

from difflib import SequenceMatcher

然后,你可以创建一个 SequenceMatcher 对象,通过传入两个序列来初始化:

matcher = SequenceMatcher(None, "文本1", "文本2")

在创建 SequenceMatcher 对象时,第一个参数是一个可调用对象,用于指定如何判断两个元素相等。通常,如果你只是想简单地比较序列中的元素,可以将其设置为 None,这样比较就会使用默认的相等判断。

获取匹配度

SequenceMatcher 提供了 ratio() 方法来计算两个序列之间的相似度(返回值是一个在 0 到 1 之间的浮点数,1 表示完全匹配):

similarity = matcher.ratio()
print(similarity)

找出匹配的块

你可以使用 get_matching_blocks() 方法来获取序列之间匹配的块。这个方法返回一个列表,列表中的每个元素都是一个具有三个元素的元组 (a, b, n),表示序列 a 中从索引 a 开始、序列 b 中从索引 b 开始、长度为 n 的子序列是匹配的。

matching_blocks = matcher.get_matching_blocks()
for block in matching_blocks:
    print(block)

查找差异

difflib.SequenceMatcher 还提供了 get_opcodes() 方法,返回一个操作码列表,描述如何从第一个序列变换到第二个序列。这个方法非常有用于实现差异比较工具,可以显示两个序列之间的差异。

opcodes = matcher.get_opcodes()
for tag, i1, i2, j1, j2 in opcodes:
    print(f"{tag}: a[{i1}:{i2}] b[{j1}:{j2}]")

这里的 tag 表示操作类型(如 'replace'、'delete'、'insert' 或 'equal'),i1:i2 表示第一个序列中受影响的范围,而 j1:j2 表示第二个序列中受影响的范围。
通过使用 SequenceMatcher,你可以非常灵活和高效地进行序列比较和差异分析。它是文本处理、数据清洗等场景中非常实用的工具。

Differ类

Differ类可以用来生成两个序列之间的差异报告,由于本程序只需要查询两篇论文的相似度,并不需要具体的分析,所以此处不展开。

用户输入的异常处理

在本次开发中,出现错误的主要原因是用户在输入可执行程序时,出现参数不正确,论文的格式不正确,或者路径不正确。这些异常都需要在程序中进行处理,以提高程序的完整性和可靠性。
异常处理要用到sys库和os库,主要代码如下:

import sys
import os
#文件格式和文件路径的异常处理
def check_file(file_path, expected_extension):
    # 检查文件格式
    if not file_path.endswith(expected_extension):
        print(f"错误:文件 '{file_path}' 不是期望的文件格式 '{expected_extension}'。")
        return False
    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"错误:文件路径不存在 '{file_path}'。")
        return False
    return True

# 获取命令行参数
arguments = sys.argv

# 检查参数数量是否正确
if len(arguments) != 4:
    print("Usage: python main.py [原文文件] [抄袭版论文的文件] [答案文件]")
    sys.exit(1)
# 检查文件
if not(check_file(arguments[1], '.txt') and
        check_file(arguments[2], '.txt') and
        check_file(arguments[3], '.txt')):
    sys.exit(2)

以下是对异常处理的结果:

使用cprofile进行性能分析


由上面两图的对比可以看出,在程序的执行中,异常处理的函数调用是占最多的,尤其是对文件路径是否存在的处理,要大量调用'get' of 'str' objects方法,所以如果想让程序执行得更快,可以将异常处理进行简化,下图是简化后的结果(将文件路径是否存在部分的异常处理去掉):

我们可以看出,程序的函数调用次数打打减少了,而且执行时间也从0.397s下降到0.001s。所以最终还是要看功能和性能之间的取舍的。

单元测试

代码如下:(由于异常单元部分在上面已经测试完毕,所以只测试 calculate_similarity单元)

由上可知测试结果无异常

代码覆盖率


由上可知,代码覆盖率完整,没有bug。

标签:查重,10,30,论文,之小白,file,序列,SequenceMatcher
From: https://www.cnblogs.com/ZhuMengXingKong/p/18078363

相关文章

  • django重庆工商大学校园车辆管理系统(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着科技的不断发展,信息化已经成为了现代社会的一种趋势。在校园中,车辆管理作为一项重要的工作,其效率和准确性对于保障校园安全和秩序具有重要意义。重庆工......
  • django中医共享管理系统设计(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着科技的发展,互联网技术已经深入到各个领域,医疗行业也不例外。中医作为中国传统的医学,其独特的诊疗方式和理论体系在全世界都有一定的影响力。然而,中医的......
  • 【论文笔记合集】Transformers in Time Series A Survey综述总结
    本文作者:slience_me文章目录TransformersinTimeSeriesASurvey综述总结1Introduction2Transformer的组成PreliminariesoftheTransformer2.1VanillaTransformer2.2输入编码和位置编码InputEncodingandPositionalEncoding绝对位置编码AbsolutePosit......
  • 基于springboot的七彩云南文化旅游网站的设计与实现(论文+源码)_kaic
    摘 要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装七彩云南文化旅游网站软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,七彩云南文......
  • 基于Java+SpringBoot的开放实验室管理系统子系统毕业设计(源码+论文)
    作者主页:Java程序员老张主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。收藏点赞不迷路 关注作者有好处文末获取源码技术选型【后端】:Java【框架】:SpringBoot【前端】:vue【JDK版本】:JDK1.8【服......
  • 【论文阅读】Autoformer Decomposition Transformers with Auto-Correlation for Long
    原始题目:Autoformer:DecompositionTransformerswithAuto-CorrelationforLong-TermSeriesForecasting中文翻译:Autoformer:用于长期序列预测的自相关分解变压器发表时间:2021年平台:AdvancesinNeuralInformationProcessingSystems文章链接:https://proceedings.neuri......
  • 基于springboot的图书推荐管理系统、图书借阅管理系统,附源码+数据库+论文+PPT,包远程安
    1、项目介绍本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述图书个性化推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系......
  • 如何使用ChatGPT快速写出一篇完美论文?
    原文链接:如何使用ChatGPT快速写出一篇完美论文?https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247597847&idx=2&sn=eaad4282191a165c08a78fbf5c6a47aa&chksm=fa823ef0cdf5b7e619433e27b1249a3d57384dc052276bfb86c681e2069e0566eda910a00b53&token=1544438010&a......
  • java毕业设计-基于springboot开发的会员制医疗预约服务管理信息系统-毕业论文+答辩PPT
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构三、系统实现展示1、系统功能模块2、管理员功能模块3、医生功能模块3、会员功能模块四、毕设内容和源代码获取总结java毕业设计-基于springboot开发的会员制医疗预......
  • Java毕业设计-基于springboot开发的4S店车辆管理系统-毕业论文+答辩PPT(附源代码+演示
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构三、系统实现展示1、系统登录2、管理员功能模块3、销售员功能模块4、维修员功能模块四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的4S店车辆管理系......