怎么查重python文本相似性计算simhash源码
怎么查重python文本相似性计算simhash源码
今天小编给大家分享一下怎么查重python文本相似性计算simhash源码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
场景:
1.计算SimHash值,及Hamming距离。
2.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源码”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。
推荐阅读
-
Lightly IDE 快捷键:Python 开发者必学的效率提升操作
-
GitHub Codespaces 模板配置:快速初始化项目环境的技巧
-
Python 类型注解进阶:mypy 静态类型检查与 IDE 集成
-
Python 3.12 模式匹配增强:结构分解与多分支逻辑简化实战
-
Lightly IDE 快捷键定制:Python 开发者专属效率提升方案
-
Python 装饰器高级用法:类装饰器与元类结合实践
-
Python 生成器表达式优化:内存占用与迭代效率平衡技巧
-
Python 类型注解深度:Protocol 协议与泛型类型约束实践
-
Python 3.12 新特性解析:模式匹配增强与性能优化实战
-
Lightly IDE 深度评测:轻量级 Python 开发工具是否适合团队协作?