第一次个人编程作业:python实现论文查重

软件工程 <21级计科12班>
作业要求:使用Markdown排版 <作业要求的链接>
作业目标:实现论文查重 <采用python实现一个简易的论文查重系统>

一、github链接和psp表格


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模块进行单元测试。
  • 代码覆盖率

五、模块部分异常处理说明

对文件路径的正确性进行检验

posted @ 2023-09-25 21:45  叭叭卜  阅读(83)  评论(0)    收藏  举报