fuzzywuzzy簡介與應用

一、什麼是fuzzywuzzy

fuzzywuzzy是一個Python庫,用於模糊字符串匹配。它根據Levenshtein距離度量字符串之間的相似度,並提供了從簡單比較到複雜比較的多個匹配函數。

在文本數據處理中,往往需要對文本相似性進行檢測和匹配。fuzzywuzzy庫便成為了Python處理文本相似性問題的一個重要工具。它可應用於多個領域,如信息提取、文本後處理、數據清洗和數據挖掘等。

二、fuzzywuzzy函數

fuzzywuzzy提供了多個函數,每個函數均提供了不同的字符串匹配策略。下面我們將介紹其中幾個最常用的函數。

1. fuzz.ratio()

fuzz.ratio()函數計算兩個字符串的簡單比率,即它們的相似程度。返回的值在0~100間,值越高,表示字符串越相似。

    from fuzzywuzzy import fuzz

    s1 = "Python programming language"
    s2 = "Python coding language"
    ratio = fuzz.ratio(s1, s2)
    print("fuzz.ratio:", ratio)

輸出結果為:fuzz.ratio: 85,表示兩個字符串的相似度為85%。

2. fuzz.partial_ratio()

fuzz.partial_ratio()函數是將較小字符串與較大字符串中的每個子串進行匹配,並返回匹配度最高的子串及其相似度。與fuzz.ratio()相比,fuzz.partial_ratio()減少了字符串的大小比較,更加適合匹配嵌入在其他文本中的子字符串。

    from fuzzywuzzy import fuzz

    s1 = "build your own website using Python"
    s2 = "Python website builder"
    partial_ratio = fuzz.partial_ratio(s1, s2)
    print("fuzz.partial_ratio:", partial_ratio)

輸出結果為:fuzz.partial_ratio: 71,表示兩個字符串的相似度為71%。

3. fuzz.token_sort_ratio()

fuzz.token_sort_ratio()函數去除字符串中的空格、特殊字符、單詞重新排序後,再計算兩個字符串之間的匹配程度。此函數處理的字符串語法結構不需要與專門術語完全一致,而只需相對接近即可。

    from fuzzywuzzy import fuzz

    s1 = "Python programming language"
    s2 = "programming language in Python"
    token_sort_ratio = fuzz.token_sort_ratio(s1, s2)
    print("fuzz.token_sort_ratio:", token_sort_ratio)

輸出結果為:fuzz.token_sort_ratio: 100,表示兩個字符串的相似度為100%。

三、fuzzywuzzy使用示例

下面我們通過一個實際的應用場景來介紹如何使用fuzzywuzzy庫。

假設我們現在有一份公司員工工資信息的表格,其中包含每位員工的姓名和ID, 薪資信息等字段。但是由於數據錄入時出現了錯誤,表格中可能存在姓名或ID信息匹配錯誤的情況,我們需要使用fuzzywuzzy來對其進行匹配和修復。

    import pandas as pd
    from fuzzywuzzy import fuzz
    from fuzzywuzzy import process

    # 讀取表格數據
    df = pd.read_csv("employee_salary.csv")
    names = df['Name'].tolist()

    # 匹配字符串
    def match_name(query, choices, limit=3):
        results = process.extract(query, choices, limit=limit)
        return results

    # 保存匹配結果
    new_names = []
    for name in names:
        result = match_name(name, names)
        if result[0][1] >= 80:
            new_names.append(result[0][0])
        else:
            new_names.append(name)

    # 更新數據表
    df['Name'] = new_names
    df.to_csv('employee_salary_new.csv', index=False)

上述代碼中,我們首先讀取了原始數據文件,並提取每位員工的姓名。然後定義了一個匹配函數match_name(),用於將每個員工姓名與整個數據集中的所有姓名逐一比較,得出其最佳匹配結果。

最後,我們根據員工姓名匹配的結果,對數據表中的姓名進行更新,將匹配結果寫入一個新的CSV文件中。

總結

本文介紹了Python中文本相似性匹配工具fuzzywuzzy的基本概念、函數和示例應用。fuzzywuzzy是一個功能強大且易於使用的Python庫,可用於處理多個領域的文本相似性匹配問題。

原創文章,作者:GALF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/133637.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GALF的頭像GALF
上一篇 2024-10-04 00:00
下一篇 2024-10-04 00:00

相關推薦

  • Java2D物理引擎簡介及應用

    本文將介紹Java2D物理引擎的基本概念、實現原理及應用案例,以及對應代碼示例。 一、物理引擎概述 物理引擎是一種計算機程序,用於模擬物理系統中的對象和其互動,如重力、碰撞、彈力等…

    編程 2025-04-29
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • Python三體運動簡介

    本文將從多個方面詳細闡述Python三體運動,包括什麼是三體運動,三體運動的公式與原理,實現三體運動的Python代碼等內容。 一、什麼是三體運動? 三體運動是指三個天體相互作用所…

    編程 2025-04-27
  • Java中的殭屍進程簡介與解決方法

    本文將對Java中的殭屍進程進行詳細闡述,並給出幾種解決方法。 一、殭屍進程的概念 在操作系統中,進程是指正在執行的程序。當一個進程創建了一個子進程,而該子進程完成了任務卻沒有被父…

    編程 2025-04-27
  • PyTorch模塊簡介

    PyTorch是一個開源的機器學習框架,它基於Torch,是一個Python優先的深度學習框架,同時也支持C++,非常容易上手。PyTorch中的核心模塊是torch,提供一些很好…

    編程 2025-04-27
  • Python操作DB文件簡介

    本文將從以下幾個方面詳細闡述如何使用Python操作DB文件: 創建和打開DB文件 執行SQL語句 讀取和寫入數據 關閉DB文件 一、創建和打開DB文件 Python內置了SQLi…

    編程 2025-04-27
  • Python寫Word模板簡介

    Python可以用來生成Word文檔,讓你可以自動化生成報表、合同、申請表等文檔。本文將從多個方面詳細介紹Python寫Word模板的方法和技巧。 一、Word模板的結構 要生成W…

    編程 2025-04-27
  • 雪峰老師簡介

    解答:深度剖析雪峰老師的IT技術經驗 一、教育背景 雪峰老師本科畢業於西安電子科技大學,獲得計算機科學與技術學位。隨後,他在美國獲得了計算機科學碩士學位。 雪峰老師所在大學是國內頂…

    編程 2025-04-27
  • Start UML簡介

    Start UML是可視化建模工具,採取UML標準的符號和符號語義,特別針對Java開發優化的能力。Start UML允許您創建和編輯UML 1.0,1.1,1.2,2.0或2.1…

    編程 2025-04-25
  • NetCDF簡介及其應用

    一、NetCDF是什麼 NetCDF(Network Common Data Form)是一種自我描述、可移植的二進制文件格式,用於存儲科學和工程數據,支持海洋、大氣、地球等多個學…

    編程 2025-04-24

發表回復

登錄後才能評論