作业二 Python实现简易论文查重

发布时间 2023-09-15 13:03:13作者: 她与急先锋皆失

Python实现简易论文查重

软件工程 https://edu.cnblogs.com/campus/gdgy/CSGrade21-12
作业要求 https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014
作业目标 学习使用Python建立工程项目,学会论文查重的具体实现步骤
github链接 https://github.com/Flychee/Flychee/tree/master/3121004843

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
-Estimate -估计这个任务需要多少时间 30 30
Development 开发 430 370
-Analysis -需求分析 (包括学习新技术) 150 90
-Design Spec -生成设计文档 60 0
-Design Review -设计复审 20 20
-Coding Standard -代码规范 (为目前的开发制定合适的规范) 30 10
-Design -具体设计 30 30
-Coding -具体编码 120 180
-Code Review -代码复审 20 40
Test 测试(自我测试,修改代码,提交修改) 220 260
-Reporting -报告 100 120
-Test Report -测试报告 60 60
-Size Measurement -计算工作量 40 40
-Postmortem & Process Improvement Plan -事后总结, 并提出过程改进计划 20 40
合计 560 660

模块接口的设计与实现过程

算法模块

函数 功能
clean(file) 清除Html标签与标点符号
read_file(file) 读取文件
similarity(ori, ori_add) 计算两份文本的相似度

关键函数实现过程

similarity(ori, ori_add)

使用Simhash算法生成两个文本间的Simhash值。Simhash是一种用于计算文本相似度的算法。它将文本表示为一个固定位数的二进制数值,
其中相似的文本具有较高的汉明距离,而不相似的文本具有较低的汉明距离。 计算两个文本间的海明距离(Hamming Distance),即Simhash值
之间的汉明距离。海明距离表示两个Simhash值二进制表示中不同位的数量。 根据海明距离计算相似度, 公式为:1 - (海明距离 / 两个文本的文本的SimHash值中的较大值)。

四、模块接口部分的性能改进

1. 性能分析图

2. 改进思路

由分析图可以看出:
bulid_by_text函数运行时间达到了总运行时间的94.2%,证明对分词的优化是整个程序改进的关键所在,本人积累尚浅,目前仍未有更好的方法。

五、模块部分单元测试展示

1. similarity(ori, ori_add)

代码示例

def similarity(ori, ori_add):
    ori_sh = sh(ori)
    ori_add_sh = sh(ori_add)
    max_sh = max(len(bin(ori_sh.value)), len(bin(ori_add_sh.value)))
    dst = ori_sh.distance(ori_add_sh)  # 汉明距离
    result = 1 - dst / max_sh
    return result

所有函数100%覆盖

未覆盖部分为主程序if分支

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

项目仅在读写文件时可能出现异常