亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何實現Simhash算法

發布時間:2022-02-15 09:09:42 來源:億速云 閱讀:247 作者:小新 欄目:開發技術

這篇文章主要介紹python如何實現Simhash算法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1、simhash步驟

simhash包含分詞、hash、加權、合并、降維五大步驟

simhash代碼如下:

import jieba
import jieba.analyse
import numpy as np

class SimHash(object):
    def simHash(self, content):
        seg = jieba.cut(content)
        # jieba.analyse.set_stop_words('stopword.txt')
        # jieba基于TF-IDF提取關鍵詞
        keyWords = jieba.analyse.extract_tags("|".join(seg), topK=10, withWeight=True)

        keyList = []
        for feature, weight in keyWords:
            # print('feature:' + feature)
            print('weight: {}'.format(weight))
            # weight = math.ceil(weight)
            weight = int(weight)
            binstr = self.string_hash(feature)
            print('feature: %s , string_hash %s' % (feature, binstr))
            temp = []
            for c in binstr:
                if (c == '1'):
                    temp.append(weight)
                else:
                    temp.append(-weight)
            keyList.append(temp)
        listSum = np.sum(np.array(keyList), axis=0)
        if (keyList == []):
            return '00'
        simhash = ''
        for i in listSum:
            if (i > 0):
                simhash = simhash + '1'
            else:
                simhash = simhash + '0'
        return simhash

    def string_hash(self, source):
        if source == "":
            return 0
        else:
            temp = source[0]
            temp1 = ord(temp)
            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 getDistance(self, hashstr1, hashstr2):
        '''
            計算兩個simhash的漢明距離
        '''
        length = 0
        for index, char in enumerate(hashstr1):
            if char == hashstr2[index]:
                continue
            else:
                length += 1

        return length

1.1分詞

分詞是將文本文檔進行分割成不同的詞組,比如詞1為:今天星期四,詞2為:今天星期五

得出分詞結果為【今天,星期四】【今天,星期五】

1.2hash

hash是將分詞結果取hash值
星期四hash為:0010001100100000101001101010000000101111011010010001100011011110
今天hash為:0010001111010100010011110001110010100011110111111011001011110101
星期五hash為:0010001100100000101001101010000000101111011010010000000010010001

1.3加權

python如何實現Simhash算法

1.4合并

python如何實現Simhash算法

1.5降維

降維是將合并的結果進行降維,如果值大于0,則置為1小于0 則置為0,因此得到的結果為:

python如何實現Simhash算法

2、simhash比對

一般simhash采用海明距離來進行計算相似度,海明距離計算如下:

對于A,B兩個n維二進制數

python如何實現Simhash算法

二者的海明距離為:

python如何實現Simhash算法

其中:

python如何實現Simhash算法

舉例:

1000與1111的海明距離為3

以上是“python如何實現Simhash算法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

精河县| 庐江县| 江川县| 三门峡市| 贵州省| 嘉鱼县| 崇义县| 临海市| 临城县| 靖边县| 泾阳县| 利辛县| 太白县| 佳木斯市| 理塘县| 扎鲁特旗| 南乐县| 曲水县| 潞城市| 延吉市| 防城港市| 裕民县| 中牟县| 华宁县| 清涧县| 延吉市| 邵武市| 姜堰市| 容城县| 襄垣县| 哈密市| 凤山县| 明光市| 平乡县| 大新县| 虹口区| 灵武市| 白山市| 布尔津县| 大庆市| 东乡族自治县|