个人项目:论文查重系统

这个作业属于哪个课程 班级链接
这个作业要求在哪里 要求链接
这个作业的目标 个人项目实现、测试报告等书写和总结

GitHub链接🔗

📈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
  • 设计目标
    用户输入文件参数时可能出错,造成文件读取错误或写入输出文件时发生错误
 posted on 2025-03-07 14:40  小雨27  阅读(44)  评论(0)    收藏  举报