个人项目:论文查重系统
这个作业属于哪个课程 |
班级链接 |
这个作业要求在哪里 |
要求链接 |
这个作业的目标 |
个人项目实现、测试报告等书写和总结 |
📈PSP表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
|
|
Estimate |
估计这个任务需要多少时间 |
30 |
30 |
Development |
开发 |
|
|
Analysis |
需求分析 (包括学习新技术) |
300 |
300 |
Design Spec |
生成设计文档 |
20 |
30 |
Design Review |
设计复审 |
20 |
30 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
30 |
30 |
Design |
具体设计 |
20 |
40 |
Coding |
具体编码 |
140 |
180 |
Code Review |
代码复审 |
20 |
30 |
Test |
测试(自我测试,修改代码,提交修改) |
250 |
200 |
Reporting |
报告 |
|
|
Test Repor |
测试报告 |
40 |
50 |
Size Measurement |
计算工作量 |
40 |
60 |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
40 |
30 |
|
合计 |
950 |
1010 |
💻计算模块接口的设计与实现过程
该系统实现了一个简单但功能完整的中文文本相似度检测,核心是通过余弦相似度算法衡量文本相似度。代码结构清晰,模块化设计合理,具备一定的健壮性和扩展性。适用于小规模文本的相似度检测任务.
代码结构
- 导入依赖
- jieba:用于中文分词
- math:用于数学计算
- argparse:用于解析命令行参数。
- collections.Counter:用于统计词频
- 全局变量
- stop_words:定义了一个中文停用词集合,用于过滤文本中的常见无意义词汇
- 文本预处理函数 preprocess
- 余弦相似度计算函数 cosine_similarity
- 主函数 main
- 处理命令行参数,读取文件,调用相似度计算函数,并输出结果
- 异常处理
- 在文件读取和写入过程中,捕获并处理可能的异常(如 FileNotFoundError 和其他未知错误)
关键设计点
- 分词与停用词过滤
- 使用 jieba 进行中文分词,确保文本处理的准确性
- 通过停用词列表过滤无意义词汇,减少噪声对相似度计算的影响
- 余弦相似度计算
- 将文本转换为词频向量,利用向量空间模型计算相似度
- 处理了向量模长为零的情况,避免除以零错误
- 命令行参数解析
- 使用 argparse 实现灵活的文件路径输入和输出
📍性能分析
- 使用snakeviz生成
.

- 改进建议
📕单元测试
- 单元测试覆盖率

- 部分单元测试代码
def test_cosine_similarity_identical_texts(self):
"""测试两个完全相同的文本的相似度是否为 1"""
text1 = "我喜欢用Python编程。Python非常强大!"
text2 = "我喜欢用Python编程。Python非常强大!"
similarity = cosine_similarity(text1, text2)
self.assertEqual(similarity, 1.0)
def test_cosine_similarity_different_texts(self):
"""测试两个完全不同文本的相似度是否为 0"""
text1 = "今天天气晴天"
text2 = "Java是一种很棒的编程语言。"
similarity = cosine_similarity(text1, text2)
self.assertEqual(similarity, 0.0)
❗异常处理
try:
# 读取文件
with open(args.file1, "r", encoding="utf-8") as f1:
content1 = f1.read()
with open(args.file2, "r", encoding="utf-8") as f2:
content2 = f2.read()
except FileNotFoundError as e:
print(f"文件读取失败: {e}")
return
except Exception as e:
print(f"读取文件时发生未知错误: {e}")
return
try:
# 将结果输进答案文件
with open(args.output_file, "w", encoding="utf-8") as f3:
f3.write(re)
except Exception as e:
print(f"写入输出文件时发生错误: {e}")
return
- 设计目标
用户输入文件参数时可能出错,造成文件读取错误或写入输出文件时发生错误