当前位置: 首页 > news >正文

第一次个人编程作业-论文查重

| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience |

| 这个作业要求在哪里| https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477 |

| 这个作业的目标 | <完成个人项目> |

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

一、项目分层结构

image

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

(1)算法关键与独到之处
算法核心: 基于最长公共子序列(LCS)的动态规划算法
中文优化:专门处理中文分词和标点符号
内存安全:分段处理大文本,避免内存溢出

(2)独到之处:
多级预处理:标点过滤→大小写统一→分词处理
性能保障:确保5秒内处理10000+词汇
精度控制:相似度结果精确到小数点后4位,输出时保留2位

三、性能分析

(1)基础性能测试
image

(2)最耗时的函数
image

(3)消耗最大的函数识别:
1.lcs_algorithm - LCS核心计算函数 (65%)
2. text_processor() - 文本处理函数 (25%)
3. file_manager() - 文件操作函数 (6%)
4. 其他辅助函数 (4%)

(4)改进思路总结:

  1. 算法层面优化:
    LCS算法: 采用动态规划优化,减少重复计算
    相似度计算: 实现早期终止策略,避免不必要的计算
    数据结构: 使用更高效的数据结构存储中间结果

  2. 文本处理优化:
    分词算法: 使用更高效的分词库或算法
    并行处理: 对大规模文本实现并行处理
    缓存机制: 对常用文本处理结果进行缓存

四、单元测试

(1)单元测试
LCS算法核心逻辑测试 (test_lcs_calculation)
构造思路:测试以下四种情况(完全相同序列,完全不同序列,部分相同序列,空序列边界情况)

def test_lcs_calculation(self):"""测试LCS算法核心逻辑"""test_cases = [(["a", "b", "c"], ["a", "b", "c"], 3),(["a", "b", "c"], ["x", "y", "z"], 0),(["a", "b", "c", "d"], ["a", "c", "e", "d"], 3),([], ["a", "b"], 0),(["a", "b"], [], 0),]for seq_a, seq_b, expected in test_cases:with self.subTest(seq_a=seq_a, seq_b=seq_b):result = LCSEngine.calculate_lcs_length(seq_a, seq_b)self.assertEqual(result, expected)

系统集成测试 (test_system_integration)
测试函数: 完整的系统流程
构造思路: 模拟真实使用场景,创建原文和抄袭文进行端到端测试

def test_system_integration(self):"""测试系统集成流程"""orig_file = os.path.join(self.test_dir, "orig.txt")plag_file = os.path.join(self.test_dir, "plag.txt")output_file = os.path.join(self.test_dir, "ans.txt")# 创建测试文件with open(orig_file, 'w', encoding='utf-8') as f:f.write("今天是星期天,天气晴,今天晚上我要去看电影。")with open(plag_file, 'w', encoding='utf-8') as f:f.write("今天是周天,天气晴朗,我晚上要去看电影。")# 测试完整流程system = PaperCheckSystem()system.load_files(orig_file, plag_file)similarity = system.calculate_similarity()system.save_result(output_file, similarity)# 验证结果self.assertAlmostEqual(similarity, 0.85, places=1)self.assertTrue(os.path.exists(output_file))with open(output_file, 'r', encoding='utf-8') as f:result = f.read().strip()self.assertTrue(result.replace('.', '').isdigit())

(2)覆盖率截图
image

http://www.zskr.cn/news/10535.html

相关文章:

  • 差分电压
  • 【ChipIntelli 系列】ASR部分——合成语言模型和多网络(多语种)切换
  • dots.llm1:小红书开源的 MoE 架构大语言模型 - 实践
  • 软工9.23
  • 本地部署qwen-0.6b
  • 25分钟小练习
  • markdown 使用指南
  • [视图功能8] 图表视图:柱状图、折线图与饼图配备实战
  • 近十年 CSP-J 复赛知识点分布表
  • 软件工程:构建数字世界的基石
  • Avalonia 学习笔记07. Control Themes(控件主题)
  • matter 协议的架构;
  • 相机标定(Camera Calibration)原理及步骤:从 “像素模糊” 到 “毫米精准” 的关键一步 - 实践
  • nRF54LM20A USB
  • 《CBI 技术有聊》对话 OpenCSG:智能体落地困境与企业转型的必然路径
  • 2025/9/23
  • Tita:更频繁的绩效考核周期的好处
  • 完整教程:DCS+PLC协同优化:基于MQTT的分布式控制系统能效提升案例
  • 详细介绍:【Linux】Linux文件系统详解:从磁盘到文件的奥秘
  • CCPC秦皇岛 2023 M Inverted
  • Hetao P10588 十载峥嵘桀骜 题解 [ 紫 ] [ 树的直径 ] [ 矩阵加速 DP ] [ 状态设计优化 ]
  • Julia 实现基于模板匹配的验证码识别方法
  • 第9节-子查询-ALL - 详解
  • 谈谈对软件工程的理解
  • [PaperReading] MemGPT: Towards LLMs as Operating Systems
  • NLP:驱动人工智能迈向 “理解” 与 “对话” 的核心引擎 - 教程
  • 实用指南:网站抓包怎么做?(网站抓包教程 HTTPS 抓包 浏览器抓包 服务器端流量分析 网站安全与调试)
  • 学习嵌入式的第三十二天——网络编程——TCP - 实践
  • HarmonyOS动态照片,简易环境助力高效开发
  • IT项目管理主要做什么?-ManageEngine卓豪