第一次个人编程作业:python实现论文查重
| 软件工程 | <21级计科12班> |
|---|---|
| 作业要求:使用Markdown排版 | <作业要求的链接> |
| 作业目标:实现论文查重 | <采用python实现一个简易的论文查重系统> |
一、github链接和psp表格
- 作业github链接:https://github.com/uhwayk/Muk/tree/main
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 10 |
| · Estimate | · 估计这个任务需要多少时间 | 15 | 15 |
| Development | 开发 | 35 | 45 |
| · Analysis | · 需求分析 (包括学习新技术) | 35 | 45 |
| · Design Spec | · 生成设计文档 | 30 | 20 |
| · Design Review | · 设计复审 | 20 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
| · Design | · 具体设计 | 45 | 40 |
| · Coding | · 具体编码 | 45 | 40 |
| · Code Review | · 代码复审 | 15 | 15 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 35 | 45 |
| Reporting | 报告 | 25 | 30 |
| · Test Repor | · 测试报告 | 35 | 40 |
| · Size Measurement | · 计算工作量 | 15 | 20 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 35 |
| · 合计 | 410 | 440 |
二、基于SimHash算法的文本查重
2.1 算法概述
- 本项目中用到的是局部敏感hash中的simhash,首先计算出simhash值,然后再计算hash值得汉明距离,最终即可得到文本的相似程度。
- 算法的主要步骤:在新拿到文本之后需要先进行分词,这是因为需要挑出TopN个词来表征这篇文本,并且分词的权重不一样,可以使用相应数据集的tf-idf值作为分词的权重,这样就分成了带权重的分词结果。
之后对所有分词进行哈希运算获取二值化的hash结果,再将权重与哈希值相乘,获得带权重的哈希值,最后进行累加以及二值化处理。 - 独到之处:对于大容量样本的识别准确率很高。
2.2 算法流程图

2.3 项目结构和算法实现类

三、模块接口部分的性能改进
采用cProfile进行性能分析,从中可以看到函数被调用次数最高达622181次。
改进思路:减少上述瓶颈函数调用的数量。

四、模块部分单元测试结果展示
- 通过unittest模块进行单元测试。
![]()
- 代码覆盖率
![]()
五、模块部分异常处理说明
对文件路径的正确性进行检验




浙公网安备 33010602011771号