第一次个人编程作业——基于Python的论文查重系统设计与实现
Github链接:
https://github.com/wujunlin6666/3124004183
一、项目简介
1.1 项目背景
本项目完成了一个基于 Python 的论文查重系统。
系统输入一篇原始论文文件以及一篇经过修改后的论文文件,通过文本相似度算法计算两篇论文之间的相似程度,并将最终结果输出到指定文件。
本项目使用 Python3 实现,支持通过命令行参数传入文件路径,满足课程对于输入输出方式的要求。
1.2 项目功能
系统主要实现以下功能:
- 从命令行读取三个文件路径:
- 原论文文件路径
- 抄袭版论文文件路径
- 输出结果文件路径
- 对文本进行预处理:
- 中文分词
- 去除标点符号
- 文本向量化
-
使用 TF-IDF 与余弦相似度算法计算文本重复率。
-
将计算结果保留两位小数输出到答案文件。
二、项目结构设计
项目主要文件:
main.py:程序入口,负责命令行参数处理。
file_utils.py:负责文件读取和结果写入。
plagiarism_checker.py:负责论文查重核心算法。
tests:保存单元测试代码。
test_files:保存测试数据。
PSP.xlsx:保存项目开发时间记录。
三、算法设计
本项目采用 TF-IDF(Term Frequency-Inverse Document Frequency)结合余弦相似度(Cosine Similarity)的文本相似度算法。
算法流程:
- 读取原论文和待检测论文文本。
- 使用 jieba 进行中文分词。
- 对文本进行预处理。
- 计算文本中词语的 TF-IDF 权重。
- 将文本转换为向量。
- 使用余弦相似度计算两个文本的相似程度。
- 输出最终重复率。
四、模块设计
plagiarism_checker.py 是系统核心模块。
主要函数:
tokenize():负责文本分词和预处理。
calculate_tfidf():计算文本 TF-IDF 权重。
cosine_similarity():计算两个文本向量之间的相似度。
calculate_similarity():提供最终查重接口。
五、PSP时间记录
项目开发过程中采用 PSP(Personal Software Process)方法记录开发时间。

六、性能分析与优化
为了分析程序运行效率,使用 Python 自带的 cProfile 工具进行性能分析。
测试命令:
python -m cProfile -s cumulative main.py test_files/large_orig.txt test_files/large_copy.txt test_files/performance_result.txt
性能分析结果显示,程序共执行 25810 次函数调用,总运行时间为 0.389 秒。
优化方案:
- 使用全局 jieba Tokenizer,减少重复初始化。
- 优化文本处理流程。
- 减少重复计算。

七、单元测试
项目使用 pytest 和 coverage 完成自动化测试。
测试命令:
pytest tests -v
测试结果:
10 passed in 0.38s
共设计10个测试用例:
- 基础分词测试
- 相同文本相似度测试
- 不同文本相似度测试
- 相似度范围测试
- 空文本测试
- 文件读取测试
- 文件写入测试
- 中文文本测试
- 标点过滤测试
- 长文本处理测试
覆盖率结果:
file_utils.py 100%
plagiarism_checker.py 100%
tests/test_plagiarism.py 100%
TOTAL 100%
测试结果如下:

使用 coverage 工具统计代码覆盖率:

测试结果显示,核心模块 file_utils.py 和 plagiarism_checker.py 均达到100%的测试覆盖率。
八、异常处理设计
- 命令行参数错误
当输入参数数量不正确时,程序提示正确使用方法。
- 文件不存在异常
捕获 FileNotFoundError,避免程序异常退出。
- 空文件异常
检测输入文本是否为空,空文件时给出错误提示。
九、Git版本管理
项目使用 Git 管理源代码。
主要提交记录:
Initial project structure
Add PSP estimation
Implement file utility module
Implement plagiarism similarity algorithm
Implement command line interface
Upgrade algorithm to TF-IDF
Add exception handling
Add unit tests and coverage
Optimize tokenizer and fix TF-IDF consistency
Complete README documentation
Update requirements

十、项目总结
通过本次个人项目开发,实现了一个完整的论文查重系统。
项目完成内容包括:
- 文件输入输出
- 中文分词
- TF-IDF算法实现
- 余弦相似度计算
- 命令行程序设计
- 单元测试
- 性能分析
- Git版本管理
通过本次项目,我掌握了从需求分析、模块设计、编码实现、测试优化到版本管理的软件开发流程,同时进一步理解了文本相似度算法在实际工程中的应用。

浙公网安备 33010602011771号