工程概论作业二——个人项目《论文查重程序》(Python 版)

本次项目 github 项目链接:https://github.com/NaHCOOO/SoftwareEngineeringHomework2

作业要求

这个作业属于哪个课程 工程概论
这个作业要求在哪里 作业要求
这个作业的目标 学习项目搭建的基本流程,学习 GitHub 的使用,设计论文查重算法和程序

需求分析

题目:论文查重

​ 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

  • 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
  • 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。

要求输入输出采用文件输入输出,规范如下:

  • 命令行参数给出:论文原文的文件的绝对路径
  • 命令行参数给出:抄袭版论文的文件的绝对路径
  • 命令行参数给出:输出的答案文件的绝对路径

注意:答案文件中输出的答案为浮点型,精确到小数点后两位

算法设计

核心思路:通过比较两篇论文中的词语出现情况来判断相似度。

  1. 预处理文本

使用正则表达式 [^\w\s] 去除文本中的标点符号和空格,确保只保留单词和空白字符。
使用 jieba 的分词工具将文本分词,并且将其转换为小写形式。

  1. 统计词频

使用 Counter 类(Python 中的快速计算元素)来计算原始论文和抄袭论文中每个词语的出现次数。

  1. 计算相似度

计算相同词语的数量:通过取两个 Counter 对象的交集(使用逻辑运算符 &)
计算总词语的数量:通过取两个 Counter 对象的并集(使用逻辑运算符 |)
计算重复率:将相同词语的数量除以总词语的数量,得出重复率。

注:这个算法的优势是简单、快速,但缺点是未考虑词语的重要性和上下文等因素,可能会产生一定误差,若对精确度和更大规模的可以考虑使用深度学习算法,通过 LSTM 和 注意力机制实现论文判重。

开发环境

  • 操作系统:MacOS Ventura 13.5.1

  • 芯片:Apple M2

  • 内存:16 GB

  • IDE:PyCharm 2022

  • Python:3.9.0

项目结构

8

项目调用示例:python main.py [原文文件] [抄袭版论文的文件] [答案文件]

模块/流程设计

异常处理说明

本项目可能出现的异常有:

  1. 文件不存在异常 —— 文件地址错误,告知文件不存在
  2. 论文为空异常 —— 业务逻辑异常,告知论文为空
  3. 除零异常 —— 语法错误,抛出异常
  4. ...

单元测试模块

性能分析

使用 Pycharm 工具自动生成

8

PSP 表格记录

PSP2.1 Personal Software Process Stages 预估耗时(min) 实际耗时(min)
Planning 计划 10 5
Estimate 估计这个任务需要多少时间 5 5
Development 开发 10 10
Analysis 需求分析 (包括学习新技术) 5 5
Design Spec 生成设计文档 5 3
Design Review 设计复审 10 2
Coding Standard 代码规范 5 5
Design 具体设计 5 5
Coding 具体编码 10 8
Code Review 代码复审 5 5
Test 测试 5 5
Reporting 报告 10 10
Test Repor 测试报告 5 5
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 5 3
合计 95 78
posted @ 2023-09-19 00:55  NaHCOOO  阅读(207)  评论(0编辑  收藏  举报