第一次个人编程作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477 |
这个作业的目标 | 实现一个论文查重程序 |
github连接: | https://github.com/YezhuT0nyS/3123004481 |
一、PSP表格如下
Process Stages | Process Stages (中文) | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 35 |
· Estimate | · 估计这个任务需要多少时间 | 160 | 240 |
Development | 开发 | 200 | 180 |
· Analysis | · 需求分析(包括学习新技术) | 120 | 140 |
· Design Spec | · 生成设计文档 | 15 | 20 |
· Design Review | · 设计复审 | 25 | 25 |
· Coding Standard | · 代码规范(为目前的开发制定合适的规范) | 20 | 10 |
· Design | · 具体设计 | 40 | 50 |
· Coding | · 具体编码 | 50 | 80 |
· Code Review | · 代码复审 | 30 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 20 | 35 |
Reporting | 报告 | 80 | 100 |
· Test Report | · 测试报告 | 40 | 70 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结,并提出过程改进计划 | 20 | 10 |
· 合计 | 870 | 1075 |
二、计算模块接口的设计与实现过程
程序整体结构
1.模块架构
2.程序流程图
3.算法独到之处
核心算法:采用改进的余弦相似度算法,通过词频向量量化文本特征,计算两篇文本的向量夹角余弦值作为重复率。
独到之处:
引入词权重机制,对重要词汇(如专业术语)赋予更高权重
4.改进思路
初始问题:对大文本(10 万字以上)处理时,词频统计和向量计算耗时过长(约 8 秒)
优化措施:
将列表存储改为字典哈希表存储,将词频查询复杂度从 O (n) 降至 O (1)
实现稀疏向量表示,只存储非零值元素
引入缓存机制,复用相同文本的处理结果
使用生成器 (generator) 替代列表推导,减少内存占用
优化效果:处理时间从 8 秒降至 1.2 秒,内存占用减少 65%
6.计算模块异常处理说明
文件不存在异常 (FileNotFoundError)
设计目标:处理输入文件路径错误或文件不存在的情况
测试样例:传入不存在的文件路径 "nonexistent.txt"
错误场景:用户输入了错误的文件路径或文件被误删除
权限错误异常 (PermissionError)
设计目标:处理程序无权限读取文件或写入结果的情况
测试样例:尝试读取系统保护文件或写入只读目录
错误场景:运行程序的用户权限不足
空文件异常 (EmptyFileError)
设计目标:处理原文或抄袭版论文为空的情况
测试样例:传入内容为空的文本文件
错误场景:用户误传空文件或文件内容被清空
格式错误异常 (FormatError)
设计目标:处理非文本格式的文件(如二进制文件)
测试样例:传入图片文件或压缩包作为输入
错误场景:用户传入了错误格式的文件
计算超时异常 (CalculationTimeoutError)
设计目标:防止程序在处理超大文本时无响应
测试样例:传入 500 万字以上的超大文本
错误场景:处理超出预期大小的文本导致计算时间过长
采用增量式词表构建,减少内存占用
实现稀疏向量存储,优化大文本处理性能