SimHash演算法 文章相似度匹配

2022-05-10 09:46:31 字數 2866 閱讀 1019

#jieba分詞

seg = jieba.cut(content)

#去除停用詞永祥

jieba.analyse.set_stop_words("stopwords.txt")

#得到前20個分詞和tf-idf權值

keywords = jieba.analyse.extract_tags("|".join(seg),topk=20,withweight=true,allowpos=())

a = 0

for feature,weight in keywords:

weight = int(weight * 20)

feature = self.string_hash(feature)

temp =

for i in feature:

if i == "1":

else:

list1 = np.sum(np.array(keylist),axis=0)

if keylist == :

return "00"

simhash = ""

#降維處理

for i in list1:

if i>0:

simhash += "1"

else:

simhash += "0"

return simhash

def string_hash(self,source):

if source == "":

return 0

else:

x = ord(source[0]) << 7

m = 1000003

mask = 2 ** 128 - 1

for c in source:

x = ((x * m) ^ ord(c)) & mask

x ^= len(source)

if x == -1:

x = -2

x = bin(x).replace('0b', '').zfill(64)[-64:]

return str(x)

# x=str(bin(hash(source)).replace('0b','').replace('-','').zfill(64)[-64:])

# return x

def hammingdis(s1,s2):

t1 = "0b" + s1

t2 = "0b" + s2

n = int(t1,2) ^ int(t2,2)

i = 0

while n:

n &= (n-1)

i += 1

print(i)

if i <= 18:

print("文字相似")

else:

print("文字不相似")

if __name__ == "__main__":

text1 = open("article1.txt","r",encoding="utf-8")

text2 = open("article2.txt","r",encoding="utf-8")

hammingdis(text1,text2)

text1.close()

text2.close()

simhash演算法的主要思想是降維,將高維的特徵向量對映成乙個f-bit的指紋(fingerprint),通過比較兩篇文章的f-bit指紋的hamming distance來確定文章是否重複或者高度近似。

pip install simhash
**實現

from simhash import simhash

def simhash_similarity(text1,text2):

a_simhash = simhash(text1)

b_simhash = simhash(text2)

print(a_simhash.value)

print(b_simhash.value)

max_hashbit = max(len(bin(a_simhash.value)),len(bin(b_simhash.value)))

print(max_hashbit)

#漢明距離

distince = a_simhash.distance(b_simhash)

print(distince)

similar = distince/max_hashbit

return similar

if __name__ == "__main__":

text1 = open("article1.txt","r",encoding="utf-8")

text2 = open("article2.txt","r",encoding="utf-8")

similar=simhash_similarity(text1,text2)

#相相似度

print(similar)

text1.close()

text2.close()

原始碼展示:github**

simhash演算法 檢查兩者相似度

一般的hash演算法是出現哪怕輕微的變化,hash結果也會發生很大的變化 simhash演算法 出現輕微的變化,hash值發生較小的變化 思想 simhash是將乙個文件,最後轉換成乙個64位的位元組,暫且稱之為特徵字,然後判斷相似只需要判斷他們的特徵字的距離是不是步驟 內容分詞 特徵值 每個詞通過...

mysql文章相似度計算 文章相似度計算

文章內容相似度計算幾種方式及優缺點 php 內建方法 similar text similar text 是php內建的字串相似度對比函式,是使用方式最便捷的一種,但是因為它的時間複雜度是 o n 3 處理時間會隨著內容長度增加,若比較5000字以上的文章,或者比較文章的量級比較大不建議使用,只是單...

simhash演算法實現 查詢檔案相似度

為什麼80 的碼農都做不了架構師?simhash是用來網頁去重最常用的hash方法,速度很快。google採用這種演算法來解決萬億級別的網頁去重任務。simhash演算法的主要思想是降維。將高維的特徵向量對映成乙個低維的特徵向量,通過兩個向量的hamming distance來確定文章是否重複或者高...