3123004806软件工程查重项目

3123004806软件工程查重项目

3123004806软件工程个人项目

这个作业属于哪个课程 <https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024>
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477
这个作业的目标 <设计一个能处理长文本的论文查重算法>

GitHub链接:xuuuyueyue/3123004806: 软件工程作业

测试环境为python 3.12

PSP表格相关记录

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

模块接口的设计与实现过程


一、设计概述

本系统基于词袋模型与余弦相似度算法,实现了文本查重功能。通过面向对象的方式设计 PlagiarismChecker 类,对文本的预处理、特征提取、相似度计算、以及查重结果输出等功能进行了模块化封装。程序主流程由 main() 函数控制,同时支持性能分析模式,便于评估系统性能瓶颈。

流程图如下


软工1流程图


二、核心类与函数设计

PlagiarismChecker 类

该类封装了文本预处理、相似度计算和查重逻辑。核心方法如下:

  1. __init__()
    初始化方法,创建 TF-IDF 向量器实例。
  2. read_file(file_path)
    负责读取指定路径的文件内容,带异常处理,确保程序稳健性。
  3. preprocess_text(text)
    对文本进行预处理,包括:去除标点符号;使用 jieba 进行中文分词;返回词语之间用空格分隔的字符串,供后续向量化处理。
  4. calculate_similarity(original_text, copied_text)
    计算两个文本的相似度:分别进行预处理;使用 TfidfVectorizer 构建向量;使用 cosine_similarity 计算余弦相似度;返回一个 [0, 1] 区间的相似度分数。
  5. check_plagiarism(original_path, copied_path, output_path)
    主查重方法,负责整体流程:加载原文与抄袭文本;计算相似度;生成当前时间;结果追加写入输出文件;控制台反馈重复率与输出状态。

三、辅助函数模块

run_performance_analysis()

性能测试模块,提供三种分析方式:

  1. 方法1 - 使用 cProfile 追踪函数调用开销
  2. 方法2 - 手动统计运行时间
  3. 方法3 - 函数级时间分析

四、主控制函数

main()

程序的入口函数,主要职责如下:

1,解析命令行参数;

2,判断是否进入 --profile 性能分析模式;

3,验证参数合法性;

4,创建 PlagiarismChecker 实例并执行查重。

接口性能改进对比

最初始的代码的性能如图

image

主要缺点在于其结构较为复杂且冗余,导致代码执行效率降低。额外的步骤和重复计算不仅使代码逻辑显得啰嗦冗长,还明显降低了程序的运行性能,增加了维护难度,对最终的查重结果没有实质性的提升,实用性较差。

不过好在重查率(如下图)是对的,只是代码过于繁琐。image

于是我进行了对代码的改进,性能图和相似度如下

image

image

这个代码设计结构清晰,具有较高的实用性和可维护性。各个功能模块划分明确,从文件读取、文本预处理到相似度计算和结果输出,避免了不必要的重复操作和资源浪费。

五个样本的运行结果如下

五个样本测试无问题

image

image

image

image

image

测试代码部分展示

计算相似度:

def calculate_similarity(self, original_text, copied_text):original_processed = self.preprocess_text(original_text)copied_processed = self.preprocess_text(copied_text)tfidf_matrix = self.vectorizer.fit_transform([original_processed, copied_processed])similarity = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix[1:2])return similarity[0][0]

测试样例:

checker = PlagiarismChecker()text1 = "机器学习是人工智能的重要分支,深度学习是机器学习的子领域。"
text2 = "人工智能包含机器学习,而深度学习又是机器学习的一个特定分支。"print("🔍 开始性能分析...")
print("=" * 50)# 方法1: cProfile 详细分析
print("方法1: cProfile 详细分析")
profiler = cProfile.Profile()
profiler.enable()for _ in range(10):  # 循环次数更少,更快checker.calculate_similarity(text1, text2)

覆盖率如下

image

可能出现的异常处理说明

1,引用库说明

import sys
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import re
import datetime
import cProfile
import pstats
import time

要在pycharm要安装以上的库才可以运行

2,环境混淆

1,可能在多个 Python 环境(比如系统自带的 Python、Anaconda 环境)中工作,虽然你在其中一个环境安装了 jieba,但运行代码时使用的是另一个没有安装该库的环境。需要再在终端安装一下。

2,系统中可能存在多个版本的 NumPy,导致了冲突,需要打开命令提示,强制彻底卸载 NumPy,也卸载 scipy 和 scikit-learn,清除 pip 缓存,重新安装 NumPy:

模型的改进建议和使用说明

模型改进建议

  1. 分词精度提升

目前使用的是 jieba.cut() 的基础分词方法,在处理复杂文本或专业术语时可能无法准确切分。建议尝试引入更先进的中文分词工具,以提升分词的上下文理解能力。

  1. 相似度算法优化

当前系统使用的是 TF-IDF 与余弦相似度算法,适用于基础文本比对,但无法捕捉深层语义信息。可以考虑模型,通过向量语义表示实现更加精准的相似度计算.。

  1. 查重结果可视化

当前结果为纯文本输出,建议扩展功能,生成图形化查重报告。例如用 matplotlib 绘制相似度热力图,或使用 pyecharts 实现在线对比报告,有助于提升查重结果的可读性和表现力。

使用说明

  1. 程序输入

该程序为命令行工具,支持用户输入三个参数:原文路径、对比文路径、结果输出路径。例如:

python plagiarism_checker.py orig.txt copied.txt result.txt

系统会读取原文与对比文件内容,执行查重流程,并将查重结果以追加形式写入输出文件中。所以,我每次只需要修改copied.txt即可

txt如图

image

  1. 查重逻辑说明

程序会将两个文本文档进行预处理(去除标点 + 中文分词),使用 TF-IDF 建模词频,并利用余弦相似度计算两者的相似程度。查重完成后会输出重复率(百分比)及具体相似度分数(浮点值),并附上时间戳。

  1. 性能分析模式

程序支持性能分析模式,只需在命令行中使用 --profile 参数启动:

python plagiarism_checker.py --profile

该模式会运行预设的测试文本,输出包括:cProfile 分析的最耗时函数(前10名),计算总耗时与平均耗时,预处理与计算模块各自所占耗时比例,相似度结果值。

  1. 输出内容格式

查重完成后,程序会将结果以如下格式追加保存至输出文件:

==================================================
查重时间:2025-09-22 22:22:22
原文文件:orig.txt
对比文件:copied.txt
重复率:75.56%
相似度分数:0.7556

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek大模型混合专家模型,DeepSeekMoE 重构 MoE 训练逻辑 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

前端 10 个 JS 神 API,开箱即用

1 Page Visibility API —— 页面“隐身”探测 常用场景: 用户切标签页时暂停视频、停止轮询document.addEventListener(visibilitychange, () => {document.visibilityState === hidden? video.pause(): video.p…

故障处理:清除 DBA_DATAPUMP_JOBS 视图中的异常数据泵作业

故障处理:清除 DBA_DATAPUMP_JOBS 视图中的异常数据泵作业我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! …

Web自动化测试智能体详解

自然语言驱动Web自动化,让测试更智能、更高效 本次Web 自动化测试智能体课程将带您探索如何利用自然语言驱动 Web 自动化测试,显著提升测试效率与智能化水平。 课程亮点 本公开课将聚焦以下核心内容: Web 常见自动化…

Queue 配合Thread使用

Queue 配合Thread使用 生产消费者模型 结果 线程【3】开始下载https://picsum.photos/200/300线程【0】开始下载https://picsum.photos/300/300线程【4】开始下载https://picsum.photos/400/300 线程【1】开始下载http…

MyEMS 进阶应用:从单厂能耗管理到集团跨区域能源数据协同分析

对于许多现代化集团企业而言,能源成本是运营管理中不可忽视的核心支出。当业务遍布全国乃至全球时,能源管理便从单一的“点”(单个工厂、楼宇)上升为复杂的“面”(整个集团网络)的挑战。传统的单点能耗管理系统已…

Playwright自动化测试框架与AI智能体应用

自动化 数据驱动 MCP协议 智能体,四位一体打造下一代测试体验 本次Playwright自动化测试框架与AI智能体应用的课程将带您深入了解如何利用Playwright这一现代Web自动化测试框架,结合AI智能体技术,提升测试效率与…

快速搞定Dify+Chrome MCP:打造能操作网页的AI助手

你是否想过让AI不仅能回答问题,还能直接操作浏览器帮你做事?比如自动填写网页表单、抓取特定数据、或者点击按钮?现在,通过Dify和Chrome MCP的结合,你可以在3分钟内搭建一个能真正"动手"操作网页的AI助…

以下内容在if判定的时候会被判定为 假

Javascript中被判定为 假 值的情况false 0 和 -0 "" 空字符串 null undefined NaN望粥汁!

Python __init__.py文件

作用在python中,存在__init__.py的文件夹被认为是包。 __init__.py文件一般用来加载包内代码依赖资源和设定包的导出行为。执行时机第一次通过"import xxx"或"from xxx import yyy"的方式, 导入包…

20250330_信安一把梭_考试篇

流量分析, 应急响应, http, ssh, icmp, ftp, telnet, 信安一把梭Tags:流量分析, 应急响应, http, ssh, icmp, ftp, telnet, 信安一把梭 0x00. 题目 某集团的路由器设备被黑客攻击了,运维工程师小辉辉正在打王者走不开…

VS Code配置Conda环境完整指南

1. 配置Anaconda PowerShell Prompt 找到Miniconda路径 [安装路径]\miniconda3\Scripts\activate.bat # 例如: D:\miniconda3\Scripts\activate.bat # 或: C:\Users\[用户名]\miniconda3\Scripts\activate.bat配置VS C…

不同Windows系统中支持的最新.Net Framework/.NET版本

在前面我写过一篇关于不同系统版本中,支持.Net Framework版本情况的文章。 https://www.cnblogs.com/zhaotianff/p/16963712.html 最近在技术群里讨论时,有涉及到Windows XP最高支持到哪个.Net Framework版本的问题。…

avalonia android TextBox多行模式下回车会关闭输入法问题

参考:https://github.com/AvaloniaUI/Avalonia/issues/19220 设置一下就行了。TextInputOptions.SetMultiline(textBox, true); TextInputOptions.SetReturnKeyType(textBox, TextInputReturnKeyType.Return);

每周读书与学习-初识JMeter 元件(二)

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。 1、前置处理器 在Jmeter…

深入解析:【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(下篇) , 万字解析, 建议收藏 ! ! !

深入解析:【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(下篇) , 万字解析, 建议收藏 ! ! !2025-09-22 14:10 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wr…

client-go限速之QPS、Burst 和 RateLimiter

QPS、Burst这两个是rest.Config里的配置,由ctrl.GetConfigOrDie()获得 QPS、Burst的默认值为: k8s.io/client-go@v0.25.0/rest/config.go1 const ( 2 DefaultQPS float32 = 5.0 3 DefaultBurst int = …

三度蝉联Gartner SASE领导者:唯一厂商的技术实力解析

帕洛阿尔托网络凭借Prisma SASE平台第三次获评Gartner SASE魔力象限领导者,该平台集成AI驱动的安全与网络能力,提供零信任访问、多云高可用架构及5倍应用性能提升,为企业提供全球规模的安全连接解决方案。2025年Gar…

水水水 || CSP-S 2025 初赛

95.5pts.初赛随便玩玩。 已严肃完成今日「You have no egg!!!」大学习。Day -1 甚至没有 Day -1.Day 0 只打 S,所以上午没事,摆摆摆。 J 填程最后一题黑题弱化版这么恐怖吗,还是个交互题。 下午出发,结果车上上来一…

python实现网站登录会话脚本 - wanghongwei

# -*- coding: utf-8 -*- import os import requests from bs4 import BeautifulSoupdef login(username, password):"""Args:username: 用户名password: 密码Returns:session: 登录后的会话对象"…