摘要:由于最近需要做大規模的文本相似度的計算,所以用到了漢明距離來快速計算文本的相似度。的原理如下圖其中的采用的是的的結果。附上的源代碼對列表進行降維海明距離判定距離是否相似
****由于最近需要做大規模的文本相似度的計算,所以用到了simhash+漢明距離來快速計算文本的相似度。** **simhash的原理如下圖:其中的weight采用的是jieba的tf-idf的結果。****
**附上python3的源代碼:**
import math
import jieba
import jieba.analyse
class SimHash(object):
def __init__(self): pass def getBinStr(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) def getWeight(self, source): # fake weight with keyword return ord(source) def unwrap_weight(self, arr): ret = "" for item in arr: tmp = 0 if int(item) > 0: tmp = 1 ret += str(tmp) return ret def simHash(self, rawstr): seg = jieba.cut(rawstr) keywords = jieba.analyse.extract_tags("|".join(seg), topK=100, withWeight=True) ret = [] for keyword, weight in keywords: binstr = self.getBinStr(keyword) keylist = [] for c in binstr: weight = math.ceil(weight) if c == "1": keylist.append(int(weight)) else: keylist.append(-int(weight)) ret.append(keylist) # 對列表進行"降維" rows = len(ret) cols = len(ret[0]) result = [] for i in range(cols): tmp = 0 for j in range(rows): tmp += int(ret[j][i]) if tmp > 0: tmp = "1" elif tmp <= 0: tmp = "0" result.append(tmp) return "".join(result) def getDistince(self, hashstr1, hashstr2): length = 0 for index, char in enumerate(hashstr1): if char == hashstr2[index]: continue else: length += 1 return length
if name == "__main__":
simhash = SimHash() s1 = u"I am very happy" s2 = u"I am very happu" hash1 = simhash.simHash(s1) hash2 = simhash.simHash(s2) distince = simhash.getDistince(hash1, hash2) value = 5 print("海明距離:", distince, "判定距離:", value, "是否相似:", distince<=value)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42802.html
此篇文章主要是闡述了如何運用python完成Sim哈希算法,文章內容依托于python的相關信息開展Sim哈希算法的詳細介紹一下,具有很強的參考意義,感興趣的朋友可以了解一下 1.為何需用Simhash? 傳統式相關性優化算法:語義相似度測算,一般采用線性空間實體模型(VSM),先向文字中文分詞,提取特征,依據特點創建文字空間向量,把文字中間相關性測算轉化成矩陣的特征值之間的距離測算,如歐...
摘要:實現參考鏈接計算各類距離關于機器學習距離的理解機器學習中的相似性度量如何通俗易懂地理解皮爾遜相關系數數學應用 8種相似度度量方式的原理及實現 歐氏距離(Euclidean Distance) 歐氏距離(也稱歐幾里得度量)指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離) showImg(https://raw.githubusercontent.com/ele...
摘要:圖像指紋與漢明距離在介紹下面其他判別相似度的方法前,先補充一些概念。漢明距離為,即代表兩張圖片完全一樣。下一次將講述利用和以訓練好的模型來進行人臉識別。本文參考文章和圖片來源的文章賴勇浩的文章下一篇地址利用進行識別相似圖片二 文章簡介 在網上看到python做圖像識別的相關文章后,真心感覺python的功能實在太強大,因此將這些文章總結一下,建立一下自己的知識體系。當然了,圖像識別這個...
摘要:由于最近涉及到匹配相似圖片的問題,所以在此記錄下解決辦法差異值哈希算法顏色直方圖環境要求庫庫差異值哈希算法檢索相似圖片,第一個想到的就是差異值哈希算法。 由于最近涉及到匹配相似圖片的問題,所以在此記錄下解決辦法:差異值哈希算法 + 顏色直方圖 環境要求:Python cv2庫 math庫 差異值哈希算法 檢索相似圖片,第一個想到的就是差異值哈希算法。這個算法的步驟是: 縮小尺寸 一般...
閱讀 2325·2021-11-24 10:18
閱讀 3402·2021-09-22 15:35
閱讀 3348·2021-09-13 10:37
閱讀 3769·2021-09-06 15:14
閱讀 2074·2021-09-06 15:02
閱讀 2220·2021-09-02 15:11
閱讀 552·2019-08-30 15:53
閱讀 3079·2019-08-29 16:15