Python实现简易论文查重

软件工程

作业要求

/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. 性能分析图

python 中文查重算法_汉明距离

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%覆盖

python 中文查重算法_python 中文查重算法_02


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

python 中文查重算法_汉明距离_03

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

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

python 中文查重算法_github_04