欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)字符串模糊匹配詳解

 更新時(shí)間:2023年11月23日 09:53:55   作者:mYlEaVeiSmVp  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)字符串模糊匹配的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下

Python實(shí)現(xiàn)字符串模糊匹配及其在實(shí)戰(zhàn)中的應(yīng)用

在實(shí)際開(kāi)發(fā)中,經(jīng)常需要根據(jù)一個(gè)字段的值來(lái)查找另一個(gè)表格中對(duì)應(yīng)的值,這時(shí)候就可以使用表格關(guān)聯(lián)函數(shù)VLOOKUP。但是,在實(shí)際數(shù)據(jù)處理中,我們經(jīng)常遇到輸入的字符串有一些變體,這對(duì)于精確匹配是很困難的。因此,在本篇文章中,我們將探討如何使用 Python 實(shí)現(xiàn)字符串模糊匹配,并介紹其在實(shí)際應(yīng)用中的具體案例。

字符串模糊匹配的核心思想

字符串模糊匹配的核心思想是利用字符串的相似度計(jì)算函數(shù),根據(jù)輸入的字符串和已知的字符串進(jìn)行比較,并返回一個(gè)相似度得分。其中,常用的相似度計(jì)算方法包括:

  • Levenshtein Distance(編輯距離)
  • Jaccard Similarity(Jaccard相似系數(shù))
  • Cosine Similarity(余弦相似度)

本文將使用編輯距離作為相似度計(jì)算的方法,編輯距離定義為把一個(gè)字符串轉(zhuǎn)化成另一個(gè)字符串所需的最少操作次數(shù)。

針對(duì)字符串模糊匹配的Python庫(kù):fuzzywuzzy

由于字符串模糊匹配在實(shí)際應(yīng)用中較為普遍,因此在 Python 中也有相應(yīng)的庫(kù)來(lái)支持字符串模糊匹配。其中,fuzzywuzzy 是比較常用的一個(gè)庫(kù)。

安裝方法:

pip install fuzzywuzzy
pip install python-Levenshtein

代碼實(shí)現(xiàn)

使用Python實(shí)現(xiàn)vlookup 字符串模糊匹配

下面我們將通過(guò)示例來(lái)演示如何使用 Python 實(shí)現(xiàn) vlookup 字符串模糊匹配。

首先,我們需要導(dǎo)入必要的庫(kù):

from fuzzywuzzy import fuzz
import pandas as pd

然后,我們定義一個(gè)函數(shù) fuzzy_merge,該函數(shù)使用編輯距離來(lái)計(jì)算兩個(gè)字符串之間的相似度。具體代碼如下所示:

def fuzzy_merge(df_1, df_2, key1, key2, threshold=90, limit=2):
    """
    使用編輯距離比較兩列字符串,并返回相似度高于閾值的結(jié)果
    :param df_1: 需要合并的 DataFrame #1
    :param df_2: 需要合并的 DataFrame #2
    :param key1: 在 DataFrame #1 中進(jìn)行比較的列名
    :param key2: 在 DataFrame #2 中進(jìn)行比較的列名
    :param threshold: 設(shè)定的相似度閾值,默認(rèn)為 90
    :param limit: 指定最多允許匹配的數(shù)量,默認(rèn)為 2
    :return: 合并后的 DataFrame
    """
    s = df_2[key2].tolist()
    m = pd.Series(df_1[key1].tolist()).apply(lambda x: process.extract(x, s, limit=limit))
    df_1['matches'] = m
    m2 = df_1['matches'].apply(lambda x: [i[0] for i in x if i[1] >= threshold] if len(x) > 0 else [])
    df_1 = df_1.assign(matches=m2)
    return df_1

以上代碼中,我們使用了 fuzz.extract 函數(shù)來(lái)計(jì)算兩個(gè)字符串之間的相似度,并返回相似度得分。這里的 process 對(duì)象是 fuzzywuzzy 庫(kù)中的一個(gè)模塊,我們需要將輸入的字符串與目標(biāo)字符串列表一一比較,以求得最相似的結(jié)果。通過(guò)設(shè)置閾值和限制,我們可以控制匹配結(jié)果的質(zhì)量和數(shù)量。

為了檢驗(yàn)函數(shù)的正確性,我們還可以創(chuàng)建以下示例數(shù)據(jù):

data1 = {'Name': ['Bill Smith', 'Mary Brown', 'John Johnson', 'Lisa Simpson'],
         'Age': [30, 25, 40, 20]}
data2 = {'Name': ['John Jonson', 'Lisa Simpson', 'Alison Jameson', 'Steve White'],
         'Income': [50000, 40000, 60000, 55000]}
df1 = pd.DataFrame(data1, columns=['Name', 'Age'])
df2 = pd.DataFrame(data2, columns=['Name', 'Income'])

然后我們就可以使用 fuzzy_merge 函數(shù)將兩個(gè) DataFrame 進(jìn)行合并了。

result = fuzzy_merge(df1, df2, 'Name', 'Name', threshold=80)

最終輸出的結(jié)果如下所示:

NameAgematchesIncome
Bill Smith30[]NaN
Mary Brown25[]NaN
John Johnson40[‘John Jonson’]50000
Lisa Simpson20[‘Lisa Simpson’] 40000

可以看到,我們成功地根據(jù)相似度進(jìn)行了匹配,并將匹配后的結(jié)果和原始數(shù)據(jù)合并在了一起。

應(yīng)用案例:基于字符串模糊匹配的公司合并

除了 VLOOKUP 函數(shù)的應(yīng)用,字符串模糊匹配在實(shí)際數(shù)據(jù)處理中還有許多應(yīng)用場(chǎng)景。比如,在公司合并、收購(gòu)等業(yè)務(wù)中,經(jīng)常需要將兩個(gè)公司的數(shù)據(jù)進(jìn)行合并。在這種情況下,由于兩個(gè)公司名稱(chēng)可能存在輕微的變化(比如大小寫(xiě)、連字符等),直接使用精確匹配往往會(huì)導(dǎo)致一些數(shù)據(jù)漏掉。

為了解決這個(gè)問(wèn)題,我們可以使用 fuzzywuzzy 庫(kù)來(lái)計(jì)算公司名稱(chēng)之間的相似度,并進(jìn)行合并。以下是一個(gè)簡(jiǎn)單的示例,以說(shuō)明如何利用字符串模糊匹配來(lái)實(shí)現(xiàn)公司數(shù)據(jù)的合并。

我們可以定義一個(gè)函數(shù) fuzzy_company_merge 來(lái)完成這個(gè)任務(wù):

def fuzzy_company_merge(df, company1, company2):
    """
    使用模糊匹配方法合并兩個(gè)公司的數(shù)據(jù)
    :param df: 包含兩個(gè)公司數(shù)據(jù)的 DataFrame
    :param company1: 第一個(gè)公司的名稱(chēng)
    :param company2: 第二個(gè)公司的名稱(chēng)
    :return: 合并后的 DataFrame
    """
    mask1 = df['公司名稱(chēng)'].apply(lambda x: fuzz.partial_ratio(x, company1)) > 80
    mask2 = df['公司名稱(chēng)'].apply(lambda x: fuzz.partial_ratio(x, company2)) > 80
    sub_df1 = df[mask1]
    sub_df2 = df[mask2]
    result = pd.concat([sub_df1, sub_df2], axis=0)
    return result

以上代碼中,我們使用了 fuzz.partial_ratio 函數(shù)來(lái)計(jì)算公司名稱(chēng)之間的相似度,并將相似度得分大于 80 的結(jié)果篩選出來(lái)進(jìn)行合并。

接下來(lái),我們使用以下示例數(shù)據(jù)來(lái)演示函數(shù)的使用方法:

data = {'公司名稱(chēng)': ['Apple Inc.', 'Google Inc.', 'Amazon.com Inc.', 'Microsoft Corporation', 'Alphabet Inc.'],
        '市值(億美元)': [2076, 1364, 1558, 1642, 1543]}
df = pd.DataFrame(data, columns=['公司名稱(chēng)', '市值(億美元)'])

現(xiàn)在,如果我們想合并 Apple 和 Alphabet 兩家公司的數(shù)據(jù),只需要調(diào)用 fuzzy_company_merge 函數(shù)即可:

result = fuzzy_company_merge(df, 'Apple Inc.', 'Alphabet Inc.')

最終輸出的結(jié)果如下所示:

公司名稱(chēng)市值(億美元)
Apple Inc.2076
Alphabet Inc.1543

可以看到,我們成功地將兩個(gè)公司的數(shù)據(jù)合并在了一起。

到此這篇關(guān)于Python實(shí)現(xiàn)字符串模糊匹配詳解的文章就介紹到這了,更多相關(guān)Python字符串模糊匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中TK窗口的創(chuàng)建方式

    Python中TK窗口的創(chuàng)建方式

    這篇文章主要介紹了Python中TK窗口的創(chuàng)建方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 基于Python實(shí)現(xiàn)m3u8視頻下載

    基于Python實(shí)現(xiàn)m3u8視頻下載

    m3u8?是一種基于文本的媒體播放列表文件格式,通常用于指定流媒體播放器播放在線(xiàn)媒體流,本文將利用Python實(shí)現(xiàn)m3u8視頻下載器,感興趣的可以了解一下
    2023-05-05
  • Python3爬蟲(chóng)學(xué)習(xí)之MySQL數(shù)據(jù)庫(kù)存儲(chǔ)爬取的信息詳解

    Python3爬蟲(chóng)學(xué)習(xí)之MySQL數(shù)據(jù)庫(kù)存儲(chǔ)爬取的信息詳解

    這篇文章主要介紹了Python3爬蟲(chóng)學(xué)習(xí)之MySQL數(shù)據(jù)庫(kù)存儲(chǔ)爬取的信息,涉及Python3針對(duì)mysql數(shù)據(jù)庫(kù)的連接、信息存儲(chǔ)等相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • django框架實(shí)現(xiàn)模板中獲取request 的各種信息示例

    django框架實(shí)現(xiàn)模板中獲取request 的各種信息示例

    這篇文章主要介紹了django框架實(shí)現(xiàn)模板中獲取request 的各種信息,結(jié)合實(shí)例形式分析了Django框架模板直接獲取request信息的相關(guān)配置與操作技巧,需要的朋友可以參考下
    2019-07-07
  • Python使用MySQLdb for Python操作數(shù)據(jù)庫(kù)教程

    Python使用MySQLdb for Python操作數(shù)據(jù)庫(kù)教程

    這篇文章主要介紹了Python使用MySQLdb for Python操作數(shù)據(jù)庫(kù)教程,詳細(xì)講述了MySQLdb的用法,針對(duì)Python操作MySQL數(shù)據(jù)庫(kù)程序設(shè)計(jì)具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Pytorch中的學(xué)習(xí)率衰減及其用法詳解

    Pytorch中的學(xué)習(xí)率衰減及其用法詳解

    這篇文章主要介紹了Pytorch中的學(xué)習(xí)率衰減及其用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python selenium 獲取接口數(shù)據(jù)的實(shí)現(xiàn)

    python selenium 獲取接口數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了python selenium 獲取接口數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python關(guān)鍵字及可變參數(shù)*args,**kw原理解析

    Python關(guān)鍵字及可變參數(shù)*args,**kw原理解析

    這篇文章主要介紹了Python關(guān)鍵字及可變參數(shù)*args,**kw原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python如何識(shí)別銀行卡卡號(hào)?

    Python如何識(shí)別銀行卡卡號(hào)?

    今天給大家?guī)?lái)的是有關(guān)Python的相關(guān)知識(shí),文章圍繞著Python如何識(shí)別銀行卡卡號(hào)展開(kāi),文中有非常詳細(xì)的代碼示例及介紹,需要的朋友可以參考下
    2021-06-06
  • Python 數(shù)字轉(zhuǎn)化成列表詳情

    Python 數(shù)字轉(zhuǎn)化成列表詳情

    這篇文章主要介紹了Python 數(shù)字轉(zhuǎn)化成列表,主要以代碼實(shí)現(xiàn)了將輸入的數(shù)字轉(zhuǎn)化成一個(gè)列表,輸入數(shù)字中的每一位按照從左到右的順序成為列表中的一項(xiàng)。,需要的朋友可以參考下
    2021-11-11

最新評(píng)論