怎么查重python文本相似性计算simhash源码

怎么查重python文本相似性计算simhash源码

今天小编给大家分享一下怎么查重python文本相似性计算simhash源码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

场景:

1.计算SimHash值,及Hamming距离。
2.SimHash适用于较长文本(大于三五百字)的相似性比较,文本越短误判率越高。

怎么查重python文本相似性计算simhash源码

Python实现:

代码如下

#-*-encoding:utf-8-*-importmathimportjiebaimportjieba.analyseclassSimHash(object):defgetBinStr(self,source):ifsource=="":return0else:x=ord(source[0])<<7m=1000003mask=2**128-1forcinsource:x=((x*m)^ord(c))&maskx^=len(source)ifx==-1:x=-2x=bin(x).replace('0b','').zfill(64)[-64:]returnstr(x)defgetWeight(self,source):returnord(source)defunwrap_weight(self,arr):ret=""foriteminarr:tmp=0ifint(item)>0:tmp=1ret+=str(tmp)returnretdefsim_hash(self,rawstr):seg=jieba.cut(rawstr)keywords=jieba.analyse.extract_tags("|".join(seg),topK=100,withWeight=True)ret=[]forkeyword,weightinkeywords:binstr=self.getBinStr(keyword)keylist=[]forcinbinstr:weight=math.ceil(weight)ifc=="1":keylist.append(int(weight))else:keylist.append(-int(weight))ret.append(keylist)#降维rows=len(ret)cols=len(ret[0])result=[]foriinrange(cols):tmp=0forjinrange(rows):tmp+=int(ret[j][i])iftmp>0:tmp="1"eliftmp<=0:tmp="0"result.append(tmp)return"".join(result)defdistince(self,hashstr1,hashstr2):length=0forindex,charinenumerate(hashstr1):ifchar==hashstr2[index]:continueelse:length+=1returnlengthif__name__=="__main__":simhash=SimHash()str1='咱哥俩谁跟谁啊'str2='咱们俩谁跟谁啊'hash2=simhash.sim_hash(str1)print(hash2)hash3=simhash.sim_hash(str2)distince=simhash.distince(hash2,hash3)value=5print("simhash",distince,"距离:",value,"是否相似:",distince<=value)

以上就是“怎么查重python文本相似性计算simhash源码”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。

发布于 2022-02-11 22:43:14
收藏
分享
海报
0 条评论
38
上一篇:PHP文件操作的函数有哪些 下一篇:mysql自增长id用完了该如何解决
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码