软件工程导论作业 2:python实现论文查重

news/2024/12/25 21:03:26/文章来源:https://www.cnblogs.com/axunlu/p/18395557

github项目地址

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229
这个作业的目标 通过Python开发个人项目,实现项目单元测试

1.PSP表格

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

2.运行环境

IDE:PyCharm Community Edition 2022.2.2

3.接口的设计与实现

一、代码组织

函数的数量及作用

  • read_file(file_path):用于读取指定文件路径的文本内容。
  • preprocess_text(text):对输入的文本进行预处理,包括去除特定字符和使用 jieba 库进行分词处理。
  • calculate_similarity(original_text, plagiarized_text):计算两个文本的相似度,通过预处理文本、使用 TfidfVectorizer 进行向量化并计算余弦相似度。
  • main():程序的主入口函数,负责处理命令行参数、读取文件、计算相似度并将结果写入输出文件。

函数之间的关系

  • main()函数调用了read_filepreprocess_textcalculate_similarity函数,形成了一个完整的处理流程。首先通过命令行参数获取文件路径,然后分别读取原文和抄袭版论文的文件内容,接着对两个文本进行预处理,最后计算相似度并输出结果。

二、算法关键及独到之处

  • 文本预处理:使用正则表达式去除文本中的字母、数字、下划线和空白字符以外的字符,然后利用 jieba 库进行分词,将文本转化为适合后续处理的格式。
  • 文本向量化:采用TfidfVectorizer将预处理后的文本转化为 TF-IDF 向量表示,这种表示方法可以突出文本中的重要词汇,同时考虑词汇在整个文本集合中的重要性。
  • 相似度计算:通过计算余弦相似度来衡量两个文本向量之间的相似程度,余弦相似度取值范围在 0 到 1 之间,值越接近 1 表示两个文本越相似。

4.性能改进

使用cproflie进行性能分析,使用snakeviz进行可视化,运行
命令行运行snakeviz.exe -p 8080 .\performance_analysis_result
得出如下图结果。可以得知,使用时间最长的函数为preprocess_text

5.单元测试

单元测试代码存放在test_cases.py

部分测试代码如下:
冒烟测试,设置三个断言

def test_smoke(self):"""冒烟测试: 测试程序基本功能可以运行"""# 模拟三个命令行参数original_file_path = r"D:\pythonProject\MyProject1\3122004748\examples\orig.txt"plagiarized_file_path = r"D:\pythonProject\MyProject1\3122004748\examples\orig_0.8_add.txt"output_file_path = r"D:\pythonProject\MyProject1\3122004748\answer.txt"# 读文件original_text = main.read_file(original_file_path)plagiarized_text = main.read_file(plagiarized_file_path)# 计算文本相似度similarity = main.calculate_similarity(original_text, plagiarized_text)assert similarity is not None, "计算文本相似度失败"# 结果保留小数点后两位rounded_similarity = round(similarity, 2)assert 0 < rounded_similarity < 1, "相似度不在合理范围内"# 打开答案文件并写入答案with open(output_file_path, 'w', encoding='utf-8') as f:f.write(str(rounded_similarity))with open(output_file_path, 'r', encoding='utf-8') as f:text = f.read()text = text.strip()assert float(text) == rounded_simila

读文件函数的部分单元测试

def test_file_context_empty(self):"""抄袭版文件内容为空(预期:提示文件为空)"""plagiarized_file_path = r"D:\pythonProject\MyProject1\3122004748\examples\orig_empty.txt"exception_name = main.read_file(plagiarized_file_path)assert exception_name == "EmptyFile"

预处理函数的部分单元测试

def test_preprocess_normal_text(self):"""纯中文文本,中英文混合文本(预期:去除标点符号、分词和拼接)"""text = "这是一个测试文本,用于检查预处理函数的效果。"processed_text = main.preprocess_text(text)assert processed_text == "这是 一个 测试 文本 用于 检查 预处理 函数 的 效果"text = "This is a test text. 这是另一个测试文本。"processed_text = main.preprocess_text(text)assert processed_text == "This   is   a   test   text   这 是 另 一个 测试 文本"

代码覆盖率

6.异常处理

FileNotFoundError
测试代码:

    def test_file_path_not_exist(self):"""原文文件路径不存在(预期:抛出异常FileNotFoundError,提示文件路径不存在)"""original_file_path = r"D:\pythonProject\MyProject1\3122004748\examples\345.txt"exception_name = main.read_file(original_file_path)assert exception_name == "FileNotFoundError"

场景:输入的文件路径不存在

7.测试报告

使用allure自动生成

# 命令行输入
pytest .\test_cases.py --alluredir ./result   
# 最后一个路径指定了json文件输出的目录allure generate ./result -o ./resport_allure --clean
# 从json文件路径中提取数据,输出一个html网页到指定路径allure open .\resport_allure 
# 打开测试报告网页

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

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

相关文章

【工具推荐】Jeecg_Tools v1.0(最新版) - jeecg框架一键漏洞利用getshell

工具介绍: Jeecg_Tools是一款jeecg框架漏洞利用工具。本工具为jeecg框架漏洞利用工具非jeecg-boot! 下载链接: 链接:https://pan.quark.cn/s/9a1016a03402使用说明 运行于jdk8环境 java -jar Jeecg_Tools-1.0-java8.jar功能: 包含poc: 登录绕过检测 jeecgFormDemo文件上传…

必应每日壁纸API封装

简介 这个类封装了必应首页的每日壁纸查看功能,提供了查看、保存壁纸的方法,最大支持查看近8天的壁纸 使用方法 async Task Main() {try{var bing = BingWallpaperAPI.CreateInstance(8); //初始化,参数8表示一共会加载8张图片var task = await bing.Current();task.Wallpap…

第17篇 RabbitMQ安装详细步骤

一.RabbitMQ是什么? RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。 ​ AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。…

How to create the Gold gold using RGB color values All In One

How to create the Gold gold using RGB color values All In OneHow to create the Gold gold using RGB color values All In One如何使用 RGB 颜色值创建金色Gold (Golden) Color Color Name: Gold (Golden) Hex Color Code: #FFD700 RGB Color Code: RGB(255, 215, 0) CMYK…

代码整洁之道--读书笔记(3)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…

谈谈Spring中的BeanPostProcessor接口(转)

原文:谈谈Spring中的BeanPostProcessor接口 作者:特务依昂一. 前言这几天正在复习Spring的相关内容,在了解bean的生命周期的时候,发现其中涉及到一个特殊的接口——BeanPostProcessor接口。由于网上没有找到比较好的博客,所有最后花了好几个小时,通过Spring的官方文档对它…

【python】打包神器--pyinstaller

1:简介pyinstaller是一个python的第三方库,它能够在Windows、Linux、 Mac OS 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个独立文件方便传递和管理。在Windows上使用就打包成.exe文件。在Mac上使用…

MYSQL的安装与配置流程

MYSQL的安装与配置流程 1.下载安装包 mysql官方下载链接2.解压并配置文件用管理员身份打开命令提示符进入解压的地址中使用一下命令安装MySQL服务mysqld install MySQL80 若显示下面失败的提示可以使用该指令卸载该服务后再重新安装 mysqld -remove MySQL80//此处为直接修改的服…

eyoucms易优网站后台密码忘记了怎么办?

如果你忘记了易优CMS(EyouCMS)网站后台的登录密码,可以按照以下步骤来重置密码: 方法一:使用官方提供的重置工具下载官方重置工具:访问易优CMS官网提供的重置工具下载链接:https://www.eyoucms.com/uploads/soft/200319/1-2003191Q000.zip。 下载并解压缩该工具包。上传…

eyoucms后台如何更换后台登录logo

扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。专业解决各种疑难杂症,您有任何网站问题都…

pbootcms后台可以打开前台打不开

问题:pbootcms后台可以打开前台打不开 原因:大概率是没有授权, 去申请授权添加后台就可以扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、…