论文查重算法 python_个人项目之论文查重

个人项目

Compiling Environment

System

win10 1803 / 1903

Python Version

二、PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

20

25

· Estimate

· 估计这个任务需要多少时间

20

20

Development

开发

465

550

· Analysis

· 需求分析 (包括学习新技术)

30

35

· Design Spec

· 生成设计文档

60

60

· Design Review

· 设计复审

60

70

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

15

10

· Design

· 具体设计

30

25

· Coding

· 具体编码

180

250

· Code Review

· 代码复审

60

60

· Test

· 测试(自我测试,修改代码,提交修改)

30

30

Reporting

报告

60

60

· Test Report

· 测试报告

30

30

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

20

20

Total

· 合计

545

628

三、论文查重算法原理

1、什么是simhash

simhash是google于2007年发布的一篇论文《Detecting Near-duplicates for web crawling》中提出的算法,初衷是用于解决亿万级别的网页去重任务,simhash通常用于长文本,通过降维处理,将长文本压缩至几个关键词来代表一篇文章,然后再将这些关键词编码成一个固定长度的二进制字符串(一般为32位或是64位),这样即用一个固定长度的编码来表示一整篇文章,我们想要对比多篇文章,只需要对比这些固定长度的编码就可以了。

2、simhash步骤

(1)、既然要用几个关键词来代替一篇文章,那么这几个关键词首先得有代表性,像类似“的”、“了”这种几乎每篇文章都会存在的词自然没有什么代表性,所以首先对文章分词后去停用词。

(2)、去停用词后计算每个词的tf-idf得分,关于tf-idf网上也有很多,在这里就不做过多介绍了,可以理解为是提取了文章中比较重要的词,并根据重要程度对每个词有个权重W,然后我们提取权重分值前N个关键词,比如对一篇文章我们选取前5个关键词和他们对应的tf-idf权重为:

(人工智能,1)、(大数据,2)、(科技,3)、(互联网,4)、(机器学习,5)

(3)、接下来需要对这些关键词进行编码,首先对5个词进行普通的hash之后得到一个N位(一般为32位或是64位)的二进制,为了方便书写,这里假设N为5,则:

人工智能:00101

大数据:11001

科技:00110

互联网:10101

机器学习:01011

(4)、针对每一个hash后的词,相应位置是1的,权重W取正,相应位置是0的,权重W取负,及变为:

人工智能:00101 ---> [-1,-1,1,-1,1]

大数据:11001 ---> [2,2,-2,-2,2]

科技:00110 ---> [-3,-3,3,3,-3]

互联网:10101 ---> [4,-4,4,-4,4]

机器学习:01011 ---> [-5,5,-5,5,5]

(5)、对上述变换后的列表进行列向累加得到:[-3, -1, 1, 1, 9]

(6)、对上述累加后的结果进行变换,对应位置为正数时取1,对应位置为负数时取0。

即:[-4, -1, 1, 1, 9] ---> 00111

这样就得到了一个文档的simhash值。即我们把一篇文章压缩成了一个固定长度的编码:00111

(7)、对两篇文章得到两个simhash值后,计算两篇文章的simhash相似度就可以直接计算这两个simhash值得相似度即可,计算两个simhash的相似度通常使用汉明距离,汉明距离说白了就是计算两个编码相对位置不相同的个数,我们也可以计算两个simhash取异或后看1的个数是否超过某个阈值(自己设定,一般3),大于阈值则判定为不相似,小于等于阈值判定为相似。

四、代码块部分单元测试展示

1.代码各个模块审计图如下:

2.各个模块具体展示时间以及占用内存:

五、单元测试展示代码

测试抄袭文本

两篇文章(.\test\test\orig.txt & .\test\test\orig_0.8_add.txt)

相似率为:0.85

两篇文章(.\test\test\orig.txt & .\test\test\orig_0.8_del.txt)

相似率为:0.83

两篇文章(.\test\test\orig.txt & .\test\test\orig_0.8_dis_1.txt)

相似率为:0.73

两篇文章(.\test\test\orig.txt & .\test\test\orig_0.8_dis_10.txt)

相似率为:0.76

两篇文章(.\test\test\orig.txt & .\test\test\orig_0.8_dis_15.txt)

相似率为:0.83

对照原文

两篇文章(.\test\test\orig.txt & .\test\test\orig.txt)

相似率为:1.0

六、异常处理说明

文件找不到或者参数输入错误

七、模块的接口设计类图

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值