第二次作业-个人项目

news/2026/1/20 10:58:02/文章来源:https://www.cnblogs.com/hsccode/p/19505354

Github连接:https://github.com/22815739yys/quickstarters/new/master

这个作业属于哪个课程 课程链接
这个作业要求在哪里 作业要求
这个作业的目标 任务目标:了解项目开发流程 熟悉git使用方式 熟练模块化开发流程
一、PSP表格
PSP2.1 Personal Software Process Stages 预估耗时(分钟)
--------------------------------------- --------
Planning 20
Estimate 10
Development 5
Analysis 40
Design Spec 25
Design Review 15
Coding Standard 10
Design 30
Coding 100
Code Review 20
Test 30
Reporting 10
Test Report 10
Size Measurement 5
Postmortem & Process Improvement Plan 10
以下是模仿你提供的模块设计文档格式,为你刚刚的项目代码补充的完整模块接口设计与实现过程说明:

二. 模块接口设计与实现过程

  1. 项目结构
    project/
    │── sim/
    │ ├── init.py
    │ ├── io.py # 文件读写模块
    │ ├── preprocess.py # 文本预处理模块
    │ └── similarity.py # 相似度计算模块

    │── 测试文本/

    │── tests/
    │ ├── init.py
    │ └── test_case.py # 边界测试样例集合

    │── main.py # 主程序入口
    │── test_long_high_similarity.py # 性能压力测试入口
    │── test.py # 快速测试入口
    │── README.md # 项目说明文档
  2. 辅助函数功能介绍
    函数名 所在模块 功能说明
    main() main.py 程序入口,解析命令行参数,调用 I/O 和相似度计算流程
    write_result(path: str, rate: float) sim.io 将相似度结果写入指定文件
    normalize_text(text: str) sim.preprocess 文本标准化处理:去除空格、统一大小写等
  3. 相似度计算模块介绍
    模块名称:sim/similarity.py
    职责:计算两段文本的相似度,返回重复率(范围 0~100%)
    模块特点:
    核心逻辑封装,主程序调用接口简单
    支持大文本计算,具备空间优化策略
    无状态、无类、函数式结构,便于调用与扩展
  4. 代码组织设计
    本模块采用函数式设计,没有使用类封装,结构清晰:

文件结构:similarity.py
python
├── duplication_rate(orig_text: str, suspect_text: str) -> float
│ ├─1. 调用 normalize_text() 对两个输入文本进行标准化处理
│ ├─ 2. 通过动态规划算法(DP)计算最小编辑距离
│ └─ 3. 按照相似度计算公式返回最终重复率```

核心接口函数

  • duplication_rate()模块唯一出口函数
    • 输入:两段原始字符串
    • 输出:重复率(浮点数,0~100)- 功能链路:
      1. 标准化文本
      2. 调用 DP 计算编辑距离
      3. 使用公式计算similarity

5. 算法核心说明

1. 文本标准化

  • 步骤:
    • 去除所有空格、制表符等空白字符
    • 转换为小写
    • (可选)去除标点或非字母数字字符(增强鲁棒性)

2. 编辑距离计算

  • 算法:动态规划(Dynamic Programming, DP)
  • 状态定义
    dp[i][j] = 将原文前i个字符转换为怀疑文前j个字符的最小编辑操作次数
    

状态转移方程:

python
dp[i][j] = min(dp[i-1][j] + 1, # 删除操作
dp[i][j-1] + 1, # 插入操作
dp[i-1][j-1] + cost # 替换(若相等 cost=0,否则 cost=1)
)
初始化:

dp[0][j] = j
dp[i][0] = i
边界处理策略:

"" vs "" → 100%
"" vs 非空→0%- 非空 vs "" → 0%
3. 重复率计算
输出浮点型
保留两位小数,便于阅读与后续处理
6. 算法独到之处
大文本优化
使用滚动数组结构,仅保留 2 行 DP 数组
内存消耗优化为 O(min(m, n)),可处理上万字级别文本
高鲁棒性设计
支持处理中英文混排、标点略有差异的文本对比
考虑空输入、极短文本等边界场景,避免崩溃或误判
可拓展性接口
上层调用仅需使用 duplication_rate(),无需关心底层实现细节
可在后续替换 DP 为哈希比较、n-gram、余弦相似度等算法,接口不变
image
三. 计算模块接口部分的性能改进

  1. 原始算法:二维动态规划
    本项目最初采用标准的动态规划算法计算最小编辑距离:

python
dp[i][j] = min(
dp[i-1][j] + 1, #删除
dp[i][j-1] + 1, # 插入
dp[i-1][j-1] + cost # 替换(若字符相同 cost=0,否则 cost=1)
)
时间复杂度:O(n×m),n 与 m 分别为两个字符串的长度。
空间复杂度:O(n×m),需维护完整的二维 DP 矩阵。
2. 存在的问题
当处理长文本(如超过几千字的文章)时,该方法会占用大量内存,并导致处理速度缓慢,甚至可能触发内存溢出错误。

  1. 优化方案:滚动数组优化
    考虑到 DP[i][j] 的状态仅依赖于 上一行与当前行的值,可将二维数组优化为两个一维数组轮换使用,极大降低空间开销。

优化前示例:
python
dp= [[0]*(m+1) for _ in range(n+1)]
优化后实现:
python
prev_row = list(range(m + 1))
curr_row = [0] * (m + 1)

for i in range(1, n+ 1):
curr_row[0] = i
for j in range(1, m+ 1):
cost = 0 if a[i-1] == b[j-1] else 1
curr_row[j] = min(
prev_row[j] +1, # 删除
curr_row[j-1] + 1, # 插入
prev_row[j-1] + cost # 替换)
prev_row, curr_row = curr_row, prev_row
4. 优化效果
image

使用 cProfile + snakeviz 进行性能分析:

测试文本长度 优化前耗时 优化后耗时 提升幅度
5000 字 12.2秒 10.4 秒 ≈ 14.75%
通过内存压缩与访问效率提升,在保持算法正确性的同时,实现了对长文本的更优支持。
image

四. 测试样例设计与验证
1.边界测试样例
文件:tests/test_case.py

测试范围覆盖了:

空文本
单字符
长文本
标点差异
Unicode 等价字符
中英文混排
多音字/同形字
大小写敏感性
部分改写情况
示例测试函数(片段)
python
def test_same_text():
assert duplication_rate("文本A", "文本A") == 100.00

def test_partial_modification():rate = duplication_rate("深度学习需要计算资源", "机器学习需要GPU资源")
assert 30 <= rate <= 70

def test_unicode_equivalence():assert duplication_rate("office", "office") == 100.00
2.文件级批量测试脚本
用于测试真实文件文本对比的主控脚本:

python
import os, subprocess

orig_file = "路径/orig.txt"suspect_files = [
"路径/orig_0.8_add.txt", "路径/orig_0.8_del.txt", ...
]

for suspect in suspect_files:
ans_file= suspect.replace(".txt", "_ans.txt")
cmd = ["python", "main.py", orig_file, suspect, ans_file]
subprocess.run(cmd, check=True)

print("全部执行完成!")

五. 异常处理机制设计

项目中关键函数均嵌入了多级异常处理机制,保证程序稳定运行:

  1. 主程序 main.py 异常处理```python
    if len(sys.argv) != 4:
    print("请使用:python main.py [orig_file] [suspect_file] [ans_file]")
    sys.exit(1)

try:
orig_text = read_file(orig_path)
suspect_text = read_file(suspect_path)
except Exception as e:
print(f"读取文件出错: {e}")
sys.exit(1)

涵盖以下异常:- 参数数量错误

  • 输入/输出文件不存在或路径错误
  • 非 UTF-8 编码引起的读取错误
  • 算法计算中异常(如空字符串)
  • 写入权限不足等 IO 错误

2. 文件读写模块 sim/io.py 异常处理

def read_file(path: str) -> str:try:with open(path, "r", encoding="raise FileNotFoundError(f"文件未找到: {path}")except IOError ase:raise IOError(f"读取文件出错: {e}")
###3. 异常场景图示(省略图,用描述代替)| 异常类型            | 系统提示信息                  |
|---------------------|-------------------------------|| 文件不存在          | 文件未找到: orig.txt        |
| 非 UTF-8 编码       | 读取文件出错: UnicodeDecodeError |
| 参数缺失            | 请使用: python main.py ...  |
| 写入失败| 写入结果文件出错: IOError   |
| 算法内部错误| 计算重复率出错: Exception   |4. 鲁棒性保障
此外,duplication_rate 支持以下边缘情况:"" vs "" → 100%
"" vs 非空 → 0%
非空 vs ""→ 0%
中英文混合、标点差异、自定义字符集等场景

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

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

相关文章

百考通AI任务书功能:智能生成贴合你专业的毕业设计任务书,规范、高效、一次通过

毕业设计任务书是高校教学管理中的关键环节&#xff0c;它不仅标志着研究工作的正式启动&#xff0c;更是后续开题、实施、论文撰写和答辩全过程的行动依据。然而&#xff0c;许多学生在撰写时常常因不熟悉本专业写作规范、技术表达能力有限&#xff0c;或缺乏权威模板参考而陷…

搭后台还在从零敲代码?SoybeanAdmin 让你 5 分钟出原型,别被局域网耽误事!

SoybeanAdmin 是一款基于 TypeScript、Vue3 的后台管理模板&#xff0c;核心功能是帮开发者快速搭建规范且美观的管理系统。它适合前端开发团队、企业 IT 部门&#xff0c;甚至前端新手 —— 模块化设计像拼积木一样拼接页面&#xff0c;自动化路由减少重复工作&#xff0c;Typ…

基于AI大数据技术的诗词信息系统设计

目录摘要关键词项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作摘要 随着人工智能和大数据技术的快速发展&#xff0c;传统诗词文化的数字化保护与创新应用成为研究热点。诗词信息系统设计通过整合自然语言…

小说文本测试

第1章 系统奖励是兽语? 傍晚。昿南郊的池塘边。阮未迟将带来的工具一一拿出摆好,自己则坐在小板凳上,将鱼饵小心挂在鱼钩上。据那老板所说,这鱼饵‘百发百中’,就算新手也绝不会空军。她弄好后,想要像提前计划好…

批量转双层PDF(可识别各种语言)

批量转双层PDF软件是一种专门用于将单层图像PDF文件转换为包含文本层和图像层的双层PDF文件的工具。这种类型的PDF不仅保留了原始文档的外观&#xff0c;还增加了对文档内容进行搜索和选择的功能&#xff0c;极大地提高了文档管理和信息检索的效率。 软件功能 1. 批量转换&…

百考通AI任务书功能:智能生成贴合你专业方向的毕业设计任务书,规范、高效、有深度

毕业设计任务书是高校教学流程中承上启下的关键文档——它不仅是选题的正式确认&#xff0c;更是后续研究、开发与论文撰写的行动纲领。然而&#xff0c;许多学生在撰写时常常因不熟悉本专业写作规范、技术细节难以准确表达&#xff0c;或缺乏权威模板参考而感到无从下手&#…

Unity 底层运行机制与数据模型

——从 Native 机器码、Mono/IL2CPP 到编辑器与运行时内存1. Unity 编辑器的本质 1.1 Unity.exe 是什么Unity 编辑器(Unity.exe / Unity.app)是一个 Native 程序也就是说:已经由 C/C++ 编译为目标平台的机器码 操作…

百考通AI任务书功能:智能生成贴合你课题的专业任务书,省时、规范、一次成型

毕业设计任务书是高校教学管理中不可或缺的正式文件&#xff0c;它不仅标志着研究工作的正式启动&#xff0c;更是后续开题、实施、论文撰写和答辩全过程的“路线图”。然而&#xff0c;许多学生在撰写时常常因不熟悉本专业写作范式、技术细节难以准确表达&#xff0c;或找不到…

2026年承德德美健康体检中心权威分析:聚焦技术合规与服务质量的专业评价 - 品牌推荐

摘要 在健康意识持续提升与医疗服务需求精细化的宏观趋势下,专业健康体检已成为个人及企业进行健康管理的首要环节。决策者,无论是企业人力资源负责人规划员工福利,还是家庭为长辈选择筛查方案,都面临着如何在众多…

企业多模态智能运营中控台

产品名称:"Omni-Flow" —— 企业多模态智能运营中控台 1. 需求设计 这款产品的核心定位是:企业员工的知识大脑与全能执行助手。它不满足于回答“是什么”,更能解决“怎么做”,并能处理复杂的文档(图片/…

揭秘2025年火锅界黑马,这些品牌突然爆火!火锅/社区火锅/老火锅/美食/特色美食/烧菜火锅/火锅店火锅哪家好吃哪个好 - 品牌推荐师

引言:火锅江湖的新势力崛起 随着消费市场的复苏与餐饮理念的迭代,火锅赛道在2025年呈现出新的竞争格局。一批兼具深厚底蕴与创新活力的品牌,凭借独特的定位和扎实的产品力,从激烈的市场竞争中脱颖而出,成为社交媒…

百考通AI任务书功能:智能生成贴合你课题的专业任务书,规范、精准、省时省力

毕业设计任务书是高校教学流程中不可或缺的正式文件&#xff0c;它不仅是学生研究工作的起点&#xff0c;更是指导教师审核可行性、学院备案监管的重要依据。然而&#xff0c;许多学生在撰写时常常因不熟悉本专业写作范式、技术细节难以准确表达&#xff0c;或找不到权威模板而…

福州研究生留学中介Top10,录取案例多,助你成功申请 - 留学机构评审官

福州研究生留学中介Top10,录取案例多,助你成功申请作为一名在国际教育领域深耕十年的规划师,我经常遇到福州的学子们为研究生申请而焦虑。大家的核心关切通常集中在:如何从众多中介中筛选出真正可靠的服务方?机构…

为什么通常外表富有吸引力的人也更为聪明?—— 基因、环境与社会互动的多重关联

为什么通常外表富有吸引力的人也更为聪明&#xff1f;—— 基因、环境与社会互动的多重关联人们会形成 “外表富有吸引力的人更聪明” 的印象&#xff0c;并非单纯的主观偏见&#xff0c;而是基因协同效应、成长环境优势、社会互动反馈三者共同作用的结果&#xff0c;这种关联是…

PCB弯折强度核心概念与测试标准

问&#xff1a;什么是 PCB 弯折强度&#xff1f;它对 PCB 产品的可靠性有什么影响&#xff1f;PCB 弯折强度&#xff0c;是指印制电路板抵抗弯曲变形而不发生断裂、分层或性能失效的能力&#xff0c;是衡量 PCB 机械可靠性的核心指标之一。​在实际应用中&#xff0c;PCB 会面临…

合肥研究生留学机构TOP10推荐,无隐形消费,放心选择 - 留学机构评审官

合肥研究生留学机构TOP10推荐,无隐形消费,放心选择作为拥有近十年经验的全案规划导师,我时常被合肥地区的高校学子及家长问及同一个问题:“如何选择一家靠谱的研究生留学中介?我们最担心的就是隐藏费用和申请不透…

为什么偏爱深色头发女性的男性更易娶到和气、健康、漂亮又聪明的妻子?—— 偏好本质、社会标签与择偶策略的深层逻辑

为什么偏爱深色头发女性的男性更易娶到和气、健康、漂亮又聪明的妻子&#xff1f;—— 偏好本质、社会标签与择偶策略的深层逻辑这种现象的核心并非 “深色头发本身具备优势”&#xff0c;而是偏爱深色头发的男性择偶偏好更务实、更少受刻板印象裹挟&#xff0c;且深色头发女性…

GNU C库glibc被曝重要安全漏洞,已经存在数十年

https://securityonline.info/decades-old-flaw-new-heap-corruption-critical-glibc-bugs-revealed/ GNU C 库&#xff08;glibc&#xff0c;为绝大多数基于 Linux 的系统提供底层支持的核心库以及很多GCC类开发环境C库&#xff09;的维护者披露了两个安全漏洞的细节&#xf…

柔性PCB弯折强度强化工艺与质量管控

问&#xff1a;柔性 PCB&#xff08;FPC&#xff09;的弯折强度有哪些特殊要求&#xff1f;与刚性 PCB 有什么区别&#xff1f;柔性 PCB 的核心应用场景是需要反复弯折、卷曲的设备&#xff0c;因此其弯折强度要求远高于刚性 PCB&#xff0c;主要体现在耐弯折疲劳性、动态弯折稳…

济南最好的研究生留学机构推荐,申请成功率高,助你留学无忧 - 留学机构评审官

济南最好的研究生留学机构推荐,申请成功率高,助你留学无忧作为一名从事国际教育规划工作已逾十年的顾问,我经常遇到济南高校学生提出的核心疑问:在本地寻找研究生留学机构时,如何才能找到真正可靠、申请成功率高、…