#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來確定文章是否重複或者高...