一、什麼是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-hk/n/133637.html