Python?Fuzzywuzzy庫基本函數(shù)及模糊字符串匹配應(yīng)用實(shí)戰(zhàn)
安裝和基本用法
1 安裝 fuzzywuzzy
pip install fuzzywuzzy
2 基本用法
from fuzzywuzzy import fuzz str1 = "Python fuzzywuzzy" str2 = "Python fuzzywuzzy library" # 使用 fuzz.ratio 進(jìn)行基本比較 ratio = fuzz.ratio(str1, str2) print(f"Similarity Ratio: {ratio}%")
模糊匹配算法
1 Levenshtein 距離
Levenshtein 距離是一種衡量兩個字符串相似程度的算法,它通過插入、刪除和替換字符的操作次數(shù)來計算相似性。
2 模糊匹配的原理和優(yōu)勢
模糊匹配允許我們在一定程度上容忍輸入字符串之間的差異,提高了匹配的靈活性。
基本函數(shù)介紹
fuzz.ratio函數(shù)詳解
fuzz.ratio
是 fuzzywuzzy 庫中用于進(jìn)行基于 Levenshtein 距離的簡單字符串比較的函數(shù)。這個函數(shù)返回一個表示相似程度的百分比,范圍從0到100,值越高表示字符串越相似。
參數(shù)
s1, s2: 要比較的兩個字符串。
示例代碼
from fuzzywuzzy import fuzz str1 = "Python fuzzywuzzy" str2 = "Python fuzzywuzzy library" # 使用 fuzz.ratio 進(jìn)行基本比較 ratio = fuzz.ratio(str1, str2) print(f"Similarity Ratio: {ratio}%")
解釋
fuzz.ratio
使用了 Levenshtein 距離算法,該算法測量了通過插入、刪除和替換字符來將一個字符串轉(zhuǎn)換為另一個字符串的操作次數(shù)。
返回的百分比表示兩個字符串之間的相似性,值越高表示相似性越大。
在示例中,str1
和 str2
的相似性為多少百分比。
應(yīng)用場景
- 用于快速比較兩個字符串的相似性,特別是在拼寫錯誤的情況下。
- 可用于拼寫檢查,判斷用戶輸入是否接近正確的拼寫。
注意事項
fuzz.ratio
是一種簡單但有效的比較方法,適用于基本的字符串相似性比較。
在處理更復(fù)雜的場景時,可以考慮使用其他函數(shù),如 fuzz.partial_ratio
、fuzz.token_sort_ratio
和 fuzz.token_set_ratio
,以滿足不同需求。
fuzz.partial_ratio函數(shù)詳解
fuzz.partial_ratio
是 fuzzywuzzy 庫中用于部分字符串匹配的函數(shù)。相比于 fuzz.ratio
,fuzz.partial_ratio
更容忍字符串中的部分相似性,適用于模糊搜索場景。
參數(shù)
s1, s2: 要比較的兩個字符串。
示例代碼
from fuzzywuzzy import fuzz query = "Python fuzzywuzzy" data = ["Python fuzzywuzzy library", "Python data science", "Java programming"] # 使用 fuzz.partial_ratio 進(jìn)行部分字符串匹配 results = [(item, fuzz.partial_ratio(query, item)) for item in data] sorted_results = sorted(results, key=lambda x: x[1], reverse=True) print("Fuzzy Search Results:") for result, similarity in sorted_results: print(f"{result} - Similarity: {similarity}%")
解釋
fuzz.partial_ratio
允許部分字符串匹配,通過尋找較長字符串中的子字符串與較短字符串的最佳匹配來計算相似性。返回的百分比表示兩個字符串之間的相似性,值越高表示相似性越大。
在示例中,通過對查詢字符串
query
與數(shù)據(jù)集中的每個字符串進(jìn)行部分匹配,得到了相似性排名。
應(yīng)用場景
適用于模糊搜索場景,其中用戶輸入的字符串可能是目標(biāo)字符串的一部分。
在處理大型數(shù)據(jù)集時,可以通過模糊搜索找到與查詢字符串部分匹配的項。
注意事項
fuzz.partial_ratio
更適合處理用戶輸入的情況,其中用戶可能只記得字符串的一部分。結(jié)果按相似性排序,可以根據(jù)需要進(jìn)行進(jìn)一步處理,例如只返回相似性超過一定閾值的結(jié)果。
fuzz.token_sort_ratio 和 fuzz.token_set_ratio函數(shù)詳解
fuzz.token_sort_ratio
和 fuzz.token_set_ratio
是 fuzzywuzzy 庫中用于處理字符串中單詞排序和集合的函數(shù)。它們適用于處理同義詞和詞序不同的情況。
fuzz.token_sort_ratio
參數(shù)
s1, s2: 要比較的兩個字符串。
示例代碼
from fuzzywuzzy import fuzz str1 = "fuzzywuzzy python library" str2 = "python library fuzzywuzzy" # 使用 fuzz.token_sort_ratio 進(jìn)行基于排序的字符串比較 ratio = fuzz.token_sort_ratio(str1, str2) print(f"Similarity Ratio (Token Sort): {ratio}%")
- 解釋
fuzz.token_sort_ratio
考慮了字符串中單詞的排序,它首先對單詞進(jìn)行排序,然后計算排序后的字符串的相似性。
返回的百分比表示兩個字符串之間的相似性,值越高表示相似性越大。
- 應(yīng)用場景
適用于處理字符串中單詞順序不同的情況,例如同義詞的不同排列。
- 注意事項
在處理同義詞時,fuzz.token_sort_ratio
提供了一種更寬容的比較方式,忽略了單詞的具體順序。
fuzz.token_set_ratio
參數(shù)
s1, s2: 要比較的兩個字符串。
示例代碼
from fuzzywuzzy import fuzz str1 = "python fuzzywuzzy library" str2 = "fuzzywuzzy python library" # 使用 fuzz.token_set_ratio 進(jìn)行基于集合的字符串比較 ratio = fuzz.token_set_ratio(str1, str2) print(f"Similarity Ratio (Token Set): {ratio}%")
解釋
fuzz.token_set_ratio
考慮了字符串中單詞的集合,它計算兩個字符串之間共享的單詞集合的相似性。
返回的百分比表示兩個字符串之間的相似性,值越高表示相似性越大。
應(yīng)用場景
適用于處理字符串中同義詞,即使單詞的順序和數(shù)量不同也能夠識別相似性。
注意事項
fuzz.token_set_ratio
是一種更靈活的比較方式,允許字符串中包含不同數(shù)量的單詞,只要它們屬于共享的單詞集合。
示例代碼
1 拼寫檢查
from fuzzywuzzy import fuzz correct_spelling = "fuzzywuzzy" user_input = "fuzzuwuzzy" # 拼寫檢查 ratio = fuzz.ratio(correct_spelling, user_input) if ratio >= 80: print("Correct spelling!") else: print("Did you mean:", correct_spelling)
2 模糊搜索
from fuzzywuzzy import fuzz query = "Python fuzzywuzzy" data = ["Python fuzzywuzzy library", "Python data science", "Java programming"] # 模糊搜索 results = [(item, fuzz.partial_ratio(query, item)) for item in data] sorted_results = sorted(results, key=lambda x: x[1], reverse=True) print("Fuzzy Search Results:") for result, similarity in sorted_results: print(f"{result} - Similarity: {similarity}%")
3 同義詞匹配
from fuzzywuzzy import fuzz reference_text = "machine learning" user_input = "AI and ML" # 同義詞匹配 ratio = fuzz.token_set_ratio(reference_text, user_input) if ratio >= 80: print("Match found!") else: print("No exact match, but similarities found.")
4 數(shù)據(jù)清洗
from fuzzywuzzy import fuzz correct_value = "Python" data = ["Ptyhon", "Pythoon", "Java", "Python programming"] # 數(shù)據(jù)清洗 cleaned_data = [item for item in data if fuzz.ratio(correct_value, item) >= 80] print("Cleaned Data:", cleaned_data)
性能優(yōu)化和注意事項
1 性能考慮
fuzzywuzzy 庫在處理大型數(shù)據(jù)集時可能會導(dǎo)致性能問題,建議謹(jǐn)慎使用。
2 緩存匹配結(jié)果
為了提高性能,可以考慮緩存匹配結(jié)果,避免重復(fù)計算。
總結(jié)
Python的fuzzywuzzy庫為字符串匹配提供了強(qiáng)大的工具,通過基于Levenshtein距離的算法,它在處理拼寫錯誤、同義詞、詞序不同等情況時展現(xiàn)出色的表現(xiàn)。在本文中,深入了解了庫中的關(guān)鍵函數(shù),包括fuzz.ratio
、fuzz.partial_ratio
、fuzz.token_sort_ratio
和fuzz.token_set_ratio
。
fuzz.ratio
簡單而直觀,適用于基本的字符串相似性比較,尤其在拼寫檢查中表現(xiàn)出色。而fuzz.partial_ratio
允許部分字符串匹配,適用于模糊搜索,處理用戶輸入可能是目標(biāo)字符串的一部分的情況。fuzz.token_sort_ratio
和fuzz.token_set_ratio
則考慮了字符串中單詞的排序和集合,分別適用于處理同義詞和詞序不同的場景。前者關(guān)注單詞排序,適用于同義詞的不同排列,而后者則處理字符串中同義詞,即使單詞的順序和數(shù)量不同也能夠識別相似性。除此之外,還介紹了庫的性能優(yōu)化和注意事項,強(qiáng)調(diào)在處理大型數(shù)據(jù)集時需謹(jǐn)慎使用,可以考慮緩存匹配結(jié)果以提高性能。
綜合而言,fuzzywuzzy庫為開發(fā)人員提供了靈活而高效的字符串匹配解決方案,可廣泛應(yīng)用于拼寫檢查、模糊搜索、同義詞匹配和數(shù)據(jù)清洗等實(shí)際場景。通過巧妙地利用其不同函數(shù),開發(fā)者可以根據(jù)具體需求選擇合適的方法,提高字符串匹配的準(zhǔn)確性和可靠性。
以上就是Python Fuzzywuzzy庫模糊字符串匹配應(yīng)用實(shí)戰(zhàn)的詳細(xì)內(nèi)容,更多關(guān)于Python Fuzzywuzzy庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Python?Socket實(shí)現(xiàn)搭建HTTP協(xié)議
網(wǎng)絡(luò)編程中,了解底層的通信機(jī)制是極其重要的,本文將帶領(lǐng)大家深入探索如何使用Python的socket庫來實(shí)現(xiàn)一個簡單的HTTP協(xié)議,感興趣的可以了解下2024-02-02Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法
本文主要介紹了Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08Python2與Python3的區(qū)別實(shí)例總結(jié)
這篇文章主要介紹了Python2與Python3的區(qū)別,結(jié)合實(shí)例形式總結(jié)分析了Python2與Python3打印輸出、編碼、數(shù)值運(yùn)算、異常處理等使用區(qū)別,需要的朋友可以參考下2019-04-04Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析
這篇文章主要介紹了Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09