软件工程第二次作业(python)
作业要求
| 这个作业属于哪个课程 | 工程概论 |
|---|---|
| 这个作业要求在哪里 | 个人项目(第二次作业) |
| 这个作业的目标 | 学习项目搭建,学习GitHub的运用,学习设计论文查重代码。 |
个人项目《用python实现论文查重程序》
本次项目 github 项目链接:第二次作业
需求分析
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位。
开发环境
编译环境:pycharm 2023.2.1
编译语言:python3.10.0
算法分析
核心思路:使用Simhash算法进行对文本进行相似度的计算。
simhash 可以将一个文档转换成一个 64 位的字节,暂且称之为特征字。判断文档是否重复,只需要判断文档特征字之间的汉明距离。根据经验,一般当两个文档特征字之间的汉明距离小于 3, 就可以判定两个文档相似。
1.预处理文件
使用正则表达式'~!#$%^&*()_+-=|\';"":/.,?><~·!@#¥%……&*()——+-=“:’;、。,?》{《}】【\n\]\[ '清除掉文本中的标点和空格,之后使用jieba的分词工具对文本进行分词。
2.使用Simhash
使用Simhash算法计算出两个文本的汉明距离,从而计算出他们的相似度。
项目结构

项目调用示例:python main.py [原文文件] [抄袭版论文的文件] [答案文件]
异常处理说明
有着简单的异常处理。

单元测试模块
!
性能分析
使用 Pycharm 工具自动生成


PSP 表格记录
| PSP2.1 | Personal Software Process Stages | 预估耗时(min) | 实际耗时(min) |
|---|---|---|---|
| Planning | 计划 | 20 | 25 |
| Estimate | 估计这个任务需要多少时间 | 5 | 5 |
| Development | 开发 | 30 | 35 |
| 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 | 测试 | 10 | 5 |
| Reporting | 报告 | 10 | 10 |
| Test Repor | 测试报告 | 5 | 5 |
| Size Measurement | 计算工作量 | 5 | 5 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 5 | 6 |
| 合计 | 135 | 129 |

浙公网安备 33010602011771号