第一次个人编程作业——基于Python的论文查重系统设计与实现

Github链接:
https://github.com/wujunlin6666/3124004183

一、项目简介

1.1 项目背景

本项目完成了一个基于 Python 的论文查重系统。

系统输入一篇原始论文文件以及一篇经过修改后的论文文件,通过文本相似度算法计算两篇论文之间的相似程度,并将最终结果输出到指定文件。

本项目使用 Python3 实现,支持通过命令行参数传入文件路径,满足课程对于输入输出方式的要求。

1.2 项目功能

系统主要实现以下功能:

  1. 从命令行读取三个文件路径:
  • 原论文文件路径
  • 抄袭版论文文件路径
  • 输出结果文件路径
  1. 对文本进行预处理:
  • 中文分词
  • 去除标点符号
  • 文本向量化
  1. 使用 TF-IDF 与余弦相似度算法计算文本重复率。

  2. 将计算结果保留两位小数输出到答案文件。

二、项目结构设计

项目主要文件:

main.py:程序入口,负责命令行参数处理。

file_utils.py:负责文件读取和结果写入。

plagiarism_checker.py:负责论文查重核心算法。

tests:保存单元测试代码。

test_files:保存测试数据。

PSP.xlsx:保存项目开发时间记录。

三、算法设计

本项目采用 TF-IDF(Term Frequency-Inverse Document Frequency)结合余弦相似度(Cosine Similarity)的文本相似度算法。

算法流程:

  1. 读取原论文和待检测论文文本。
  2. 使用 jieba 进行中文分词。
  3. 对文本进行预处理。
  4. 计算文本中词语的 TF-IDF 权重。
  5. 将文本转换为向量。
  6. 使用余弦相似度计算两个文本的相似程度。
  7. 输出最终重复率。

四、模块设计

plagiarism_checker.py 是系统核心模块。

主要函数:

tokenize():负责文本分词和预处理。

calculate_tfidf():计算文本 TF-IDF 权重。

cosine_similarity():计算两个文本向量之间的相似度。

calculate_similarity():提供最终查重接口。

五、PSP时间记录

项目开发过程中采用 PSP(Personal Software Process)方法记录开发时间。

image

六、性能分析与优化

为了分析程序运行效率,使用 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 秒。

优化方案:

  1. 使用全局 jieba Tokenizer,减少重复初始化。
  2. 优化文本处理流程。
  3. 减少重复计算。

image

七、单元测试

项目使用 pytest 和 coverage 完成自动化测试。

测试命令:
pytest tests -v

测试结果:
10 passed in 0.38s

共设计10个测试用例:

  1. 基础分词测试
  2. 相同文本相似度测试
  3. 不同文本相似度测试
  4. 相似度范围测试
  5. 空文本测试
  6. 文件读取测试
  7. 文件写入测试
  8. 中文文本测试
  9. 标点过滤测试
  10. 长文本处理测试

覆盖率结果:
file_utils.py 100%
plagiarism_checker.py 100%
tests/test_plagiarism.py 100%

TOTAL 100%

测试结果如下:

image

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

image

测试结果显示,核心模块 file_utils.py 和 plagiarism_checker.py 均达到100%的测试覆盖率。

八、异常处理设计

  1. 命令行参数错误

当输入参数数量不正确时,程序提示正确使用方法。

  1. 文件不存在异常

捕获 FileNotFoundError,避免程序异常退出。

  1. 空文件异常

检测输入文本是否为空,空文件时给出错误提示。

九、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

image

十、项目总结

通过本次个人项目开发,实现了一个完整的论文查重系统。

项目完成内容包括:

  • 文件输入输出
  • 中文分词
  • TF-IDF算法实现
  • 余弦相似度计算
  • 命令行程序设计
  • 单元测试
  • 性能分析
  • Git版本管理

通过本次项目,我掌握了从需求分析、模块设计、编码实现、测试优化到版本管理的软件开发流程,同时进一步理解了文本相似度算法在实际工程中的应用。

posted @ 2026-09-13 20:58  伍俊霖  阅读(9)  评论(0)    收藏  举报