国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python實(shí)現(xiàn)文本相似度排名計算

這篇具有很好參考價值的文章主要介紹了python實(shí)現(xiàn)文本相似度排名計算。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

? ?項(xiàng)目中,客戶突然提出需要根據(jù)一份企業(yè)名單查找對應(yīng)的內(nèi)部系統(tǒng)用戶信息,然后根據(jù)直接的企業(yè)社會統(tǒng)一信用號和企業(yè)名稱進(jìn)行匹配,發(fā)現(xiàn)匹配率只有2.86%,低得可憐。所以根據(jù)客戶的要求,需要將匹配率提高到70-80%左右,于是開始了折騰之路。

? ? 上網(wǎng)一查,各種相似度的算法供選擇,簡直是眼花繚亂,感嘆現(xiàn)在python發(fā)展的強(qiáng)大,需要做什么研究都能快速運(yùn)用上各種算法庫,找到的算法有:

1、歐幾里得距離(Eucledian Distance)
歐氏距離是最常用的距離計算公式,衡量的是多維空間中各個點(diǎn)之間的絕對距離。

2、曼哈頓距離(Manhattan Distance)
曼哈頓距離依賴坐標(biāo)系統(tǒng)的轉(zhuǎn)度,而非系統(tǒng)在坐標(biāo)軸上的平移或映射,他是使用在幾何度量空間的幾何學(xué)用語,用以標(biāo)明兩個點(diǎn)在標(biāo)準(zhǔn)坐標(biāo)系上的絕對軸距總和。

3.切比雪夫距離
在數(shù)學(xué)中,切比雪夫距離(Chebyshev distance)或是L∞度量,是向量空間中的一種度量,二個點(diǎn)之間的距離定義是其各坐標(biāo)數(shù)值差絕對值的最大值。以數(shù)學(xué)的觀點(diǎn)來看,切比雪夫距離是由一致范數(shù)(uniform norm)(或稱為上確界范數(shù))所衍生的度量,也是超凸度量(injective metric space)的一種。?
4、明可夫斯基距離(Minkowski distance)
明氏距離是歐氏距離的推廣。閔氏距離不是一種距離,而是一組距離的定義。閔氏距離的定義:兩個n維變量a(x11,x12,…,x1n)與b(x21,x22,…,x2n)間的閔可夫斯基距離定義為:
其中p是一個變參數(shù)。
當(dāng)p=1時,就是曼哈頓距離
當(dāng)p=2時,就是歐氏距離
當(dāng)p→∞時,就是切比雪夫距離
根據(jù)變參數(shù)的不同,閔氏距離可以表示一類的距離。
5、詞袋模型 6、TF-IDF 7、余弦相似度8、Python自帶比較相似度函數(shù)difflib.SequenceMatcher 9、word2vec 10、JS距離 11、simtext?等等... ...

然后最后我們采用的是?Levenshtein,Levenshtein Distance是一個度量兩個字符序列之間差異的字符串度量標(biāo)準(zhǔn),兩個單詞之間的Levenshtein Distance是將一個單詞轉(zhuǎn)換為另一個單詞所需的單字符編輯(插入、刪除或替換)的最小數(shù)量。Levenshtein Distance是1965年由蘇聯(lián)數(shù)學(xué)家Vladimir Levenshtein發(fā)明的。Levenshtein Distance也被稱為編輯距離(Edit Distance)。
?安裝對應(yīng)的庫

# conda install python-Levenshtein
# pip install python-Levenshtein

計算字符串的相似度

漢明距離,要求str1和str2必須長度一致。是描述兩個等長字串之間對應(yīng)位置上不同字符的個數(shù)。

編輯距離,也稱為Levenshtein距離,描述由一個字串轉(zhuǎn)化成另一個字串最少的操作次數(shù),在其中的操作包括插入、刪除、替換。

萊文斯坦比,計算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的長度總和,ldist是類編輯距離
注意:這里的類編輯距離不是2中所說的編輯距離,2中三種操作中每個操作+1,而在此處,刪除、插入依然+1,但是替換+2
這樣設(shè)計的目的:ratio(‘a(chǎn)’, ‘c’),sum=2,按2中計算為(2-1)/2 = 0.5,’a’,'c’沒有重合,顯然不合算,但是替換操作+2,就可以解決這個問題。
?

在實(shí)際操作中,我們應(yīng)用了萊文斯坦比來給不同的企業(yè)名稱打分

第一步:剔除高頻詞,由于通過企業(yè)名稱精確匹配發(fā)現(xiàn)很難匹配到對應(yīng)的用戶名稱,那么很有可能這份企業(yè)名單中的企業(yè)名稱不是那么符合規(guī)范也可能更改了其他后綴、前綴,所以通過剔除高頻詞之后,再進(jìn)行模糊匹配。

#region 第一步
        excelname = '*******.xlsx'
        LoadPath = excelname  #加載excel路徑(這里為相對路徑,excel表與該程序在同一文件夾下就能識別,所以只用excel文件名即可)
        #excel表格初始化
        book=load_workbook(LoadPath, data_only=True)#加載已有Excel文檔
        
        sheet_current_week_result=book['sheet1']#加載需要的工作簿(這里為excel表中的sheet工作簿)

        #  剔除企業(yè)高頻詞       
        w = 1
        w = w + 1
        while w <= sheet_current_week_result.max_row:
            strreplace = sheet_current_week_result['A'+str(w)].value
            for qy_gpc in ['有限公司','**省','科技','供應(yīng)站','分公司','有限責(zé)任','有限','貿(mào)易','湖南','公司']:            
                strreplace = strreplace.replace(qy_gpc,'')
            sheet_current_week_result['E'+str(w)].value = strreplace
            print(w)
            w = w + 1

        book.save(LoadPath)
#endregion

第二步:模糊匹配,根據(jù)剔除后的企業(yè)名稱與內(nèi)部系統(tǒng)的用戶名進(jìn)行模糊匹配,可能得到一個企業(yè)名稱對應(yīng)多個用戶名的情況,這樣才需要我們的第三步,用戶名稱相似度排名打分,當(dāng)然第二步中我們可能獲取到完全匹配的名稱,我們需要另外存放起來。

#region 第二步

    df = pd.read_excel('***.xlsx', sheet_name='sheet1')
    df.index = range(1,len(df)+1)
    df = df[:len(df)+1]
    df = df.values.tolist()

    all_zbdc = []
    zbdc_tup = []
    for row in df: # 2. 將剔除后的企業(yè)名稱、匹配后用戶名稱完全相等的記錄找出來,得到表AllMate
        qy_nm,qy_area,qy_code,qy_bs_scope,qy_tc_gpc,qy_mate_nm = row
        zbdc = row[0]
        res_zbdc = []
        flag = True

        if qy_nm == qy_mate_nm:
            res_row = [qy_nm,qy_area,qy_code,qy_bs_scope,qy_tc_gpc,qy_mate_nm,100,1,Levenshtein.ratio(qy_nm, qy_tc_gpc) * 100]
            print(res_row)
            all_zbdc.append(res_row)
            flag = False 

        if flag:
            zbdc_tup.append([qy_nm,qy_area,qy_code,qy_bs_scope,qy_tc_gpc,qy_mate_nm])
    
    df = pd.DataFrame(all_zbdc)
    df.to_excel('AllMate.xlsx', sheet_name='mate', index=False)
    #endregion

第三步:相似度排名打分

#region 第三步
    print(len(zbdc_tup))
    res = []
    for row in zbdc_tup:
        qy_nm,qy_area,qy_code,qy_bs_scope,qy_tc_gpc,qy_mate_nm = row
        res_zbdc = []
        strreplace = qy_mate_nm
        for qy_mate_gpc in ['有限公司','**省','科技','供應(yīng)站','分公司','有限責(zé)任','有限','貿(mào)易','**','公司']:            
                strreplace = strreplace.replace(qy_mate_gpc,'')

        d_n =  intersection(strreplace, qy_tc_gpc)
        sim = max(Levenshtein.ratio(strreplace, d_n),Levenshtein.ratio(qy_tc_gpc, d_n))
        res_row = [qy_nm,qy_area,qy_code,qy_bs_scope,qy_tc_gpc,qy_mate_nm,strreplace,sim * 100]
        res_zbdc.append(res_row)

        res.append(get_top3(res_zbdc))

        df = pd.concat(res)
        df.to_excel('SimilarMate.xlsx', sheet_name='mate', index=False)

        #endregion

涉及到的自定義函數(shù):文章來源地址http://www.zghlxwxcb.cn/news/detail-650871.html

def intersection(string1, string2):
    return [cha for cha in string2 if cha in string1]

def get_top3(datas:list):
    df = pd.DataFrame(datas,columns=["企業(yè)名稱","區(qū)塊","統(tǒng)一社會信用代碼","經(jīng)營范圍","企業(yè)匹配結(jié)果名稱","企業(yè)匹配結(jié)果名稱剔除高頻","名稱相似度"])
    df = df.sort_values("名稱相似度",ascending=False)
    df.index = range(1,len(df)+1)
    df = df[:3]
    df['相似度排名'] = df.index
    all_sim = []
    for i in range(len(df)):
        row = df.iloc[i].to_list()
        all_sim.append(Levenshtein.ratio(row[0], row[3]) * 100)
    df['全名相似度'] = all_sim
    print(df)
    return df

到了這里,關(guān)于python實(shí)現(xiàn)文本相似度排名計算的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 集成多元算法,打造高效字面文本相似度計算與匹配搜索解決方案,助力文本匹配冷啟動[BM25、詞向量、SimHash、Tfidf、SequenceMatcher]

    集成多元算法,打造高效字面文本相似度計算與匹配搜索解決方案,助力文本匹配冷啟動[BM25、詞向量、SimHash、Tfidf、SequenceMatcher]

    搜索推薦系統(tǒng)專欄簡介:搜索推薦全流程講解(召回粗排精排重排混排)、系統(tǒng)架構(gòu)、常見問題、算法項(xiàng)目實(shí)戰(zhàn)總結(jié)、技術(shù)細(xì)節(jié)以及項(xiàng)目實(shí)戰(zhàn)(含碼源) 專欄詳細(xì)介紹:搜索推薦系統(tǒng)專欄簡介:搜索推薦全流程講解(召回粗排精排重排混排)、系統(tǒng)架構(gòu)、常見問題、算法項(xiàng)目

    2024年02月05日
    瀏覽(30)
  • 【計算機(jī)視覺】使用 notebook 展示如何下載和運(yùn)行 CLIP models,計算圖片和文本相似度,實(shí)現(xiàn) zero-shot 圖片分類

    【計算機(jī)視覺】使用 notebook 展示如何下載和運(yùn)行 CLIP models,計算圖片和文本相似度,實(shí)現(xiàn) zero-shot 圖片分類

    項(xiàng)目地址: CLIP(Contrastive Language-Image Pretraining)是由OpenAI開發(fā)的一個深度學(xué)習(xí)模型,用于處理圖像和文本之間的聯(lián)合表示。它的目標(biāo)是將圖像和文本嵌入到一個共享的向量空間中,使得相似的圖像和文本在這個空間中距離較近,而不相似的圖像和文本距離較遠(yuǎn)。 CLIP模型的特

    2024年02月08日
    瀏覽(20)
  • Java 計算文本相似度

    2024年02月11日
    瀏覽(21)
  • scala 短文本相似度計算

    simHash類的算法更適合長文本的相似度判斷,而短文本可考慮一下幾種方法: 一、編輯距離+jacard距離 對于dataframe,getLevenshtein可利用原生的levenshtein函數(shù) 二、md5 三、語義向量模型 其他思路 python的difflib使用

    2024年02月15日
    瀏覽(19)
  • 用java計算文本相似度

    遇到這樣一個需求,需要計算兩個文本內(nèi)容的相似度,以前也接觸過,下面列舉幾種方式,也是我在網(wǎng)上查了很多內(nèi)容整理的,直接上代碼,供大家參考,如果你也有這樣的需求,希望能幫到你: 引入pom 代碼 Jaccard計算文本相似性,效果并不咋地,但在一些應(yīng)用環(huán)境上,使用

    2024年02月10日
    瀏覽(18)
  • 自然語言處理14-基于文本向量和歐氏距離相似度的文本匹配,用于找到與查詢語句最相似的文本

    大家好,我是微學(xué)AI,今天給大家介紹一下自然語言處理實(shí)戰(zhàn)項(xiàng)目14-基于文本向量和歐氏距離相似度的文本匹配,用于找到與查詢語句最相似的文本。NLP中的文本匹配是指通過計算文本之間的相似度來找到與查詢語句最相似的文本。其中一種常用的方法是基于文本向量和歐氏

    2024年02月15日
    瀏覽(19)
  • LLM - LLaMA-2 獲取文本向量并計算 Cos 相似度

    LLM - LLaMA-2 獲取文本向量并計算 Cos 相似度

    目錄 一.引言 二.獲取文本向量 1.hidden_states 與 last_hidden_states ◆?hidden_states ◆?last_hidden_states? 2.LLaMA-2 獲取 hidden_states ◆ model config? ◆ get Embedding 三.獲取向量 Cos 相似度 1.向量選擇 2.Cos 相似度 3.BERT-whitening 特征白化 4.評估指標(biāo)對比 四.總結(jié) 前面提到了兩種基于統(tǒng)計的機(jī)器翻

    2024年02月10日
    瀏覽(20)
  • python+openCV使用SIFT算法實(shí)現(xiàn)印章的總相似度檢測

    python+openCV使用SIFT算法實(shí)現(xiàn)印章的總相似度檢測

    首先整體流程是預(yù)建了一個印章庫,包含若干張圖片。目的是輸入一張印章圖片,與庫里圖片對比,最終顯示相似度最高的三張。記一下關(guān)鍵代碼。 1.圖像預(yù)處理 主要是紅色區(qū)域提取、常規(guī)灰度二值、對于形態(tài)不好的圖片做個腐蝕啥的。 2.做一個霍夫圓打開,方便后續(xù)文字識

    2024年02月08日
    瀏覽(19)
  • Python案例分析|文本相似度比較分析

    Python案例分析|文本相似度比較分析

    ?本案例通過設(shè)計和實(shí)現(xiàn)有關(guān)文本相似度比較的類Vector和Sketch,幫助大家進(jìn)一步掌握設(shè)計Python類來解決實(shí)際問題的能力。 通過計算并比較文檔的摘要可實(shí)現(xiàn)文本的相似度比較。 文檔摘要的最簡單形式可以使用文檔中的k-grams(k個連續(xù)字符)的相對頻率的向量來表示。假設(shè)字符

    2024年02月16日
    瀏覽(27)
  • 利用Redis實(shí)現(xiàn)向量相似度搜索:解決文本、圖像和音頻之間的相似度匹配問題

    在自然語言處理領(lǐng)域,有一個常見且重要的任務(wù)就是文本相似度搜索。文本相似度搜索是指根據(jù)用戶輸入的一段文本,從數(shù)據(jù)庫中找出與之最相似或最相關(guān)的一段或多段文本。它可以應(yīng)用在很多場景中,例如問答系統(tǒng)、推薦系統(tǒng)、搜索引擎等。 比如,當(dāng)用戶在知乎上提出一個

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包