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

Python?Fuzzywuzzy庫基本函數(shù)及模糊字符串匹配應(yīng)用實(shí)戰(zhàn)

 更新時間:2023年12月28日 09:37:34   作者:濤哥聊Python  
fuzzywuzzy?是一個用于模糊字符串匹配的?Python?庫,它基于編輯距離算法,提供了多個函數(shù)來比較字符串之間的相似性,在實(shí)際開發(fā)中,字符串匹配是一項常見但具有挑戰(zhàn)性的任務(wù),用戶可能犯拼寫錯誤,使用縮寫或者輸入同義詞,因此,我們需要一種方法來處理這些情況

安裝和基本用法

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.ratiofuzz.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_ratiofuzz.token_sort_ratiofuzz.token_set_ratio。

fuzz.ratio簡單而直觀,適用于基本的字符串相似性比較,尤其在拼寫檢查中表現(xiàn)出色。而fuzz.partial_ratio允許部分字符串匹配,適用于模糊搜索,處理用戶輸入可能是目標(biāo)字符串的一部分的情況。fuzz.token_sort_ratiofuzz.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教程

    一小時快速入門Python教程

    這篇文章主要講述了幾個例子,通過簡單的demo讓有寫代碼經(jīng)驗的你能夠快速的入門Python的使用,大大提升你的學(xué)習(xí)效率
    2021-06-06
  • 使用Python?Socket實(shí)現(xiàn)搭建HTTP協(xié)議

    使用Python?Socket實(shí)現(xiàn)搭建HTTP協(xié)議

    網(wǎng)絡(luò)編程中,了解底層的通信機(jī)制是極其重要的,本文將帶領(lǐng)大家深入探索如何使用Python的socket庫來實(shí)現(xiàn)一個簡單的HTTP協(xié)議,感興趣的可以了解下
    2024-02-02
  • Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法

    Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法

    本文主要介紹了Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 深入講解Python編程中的字符串

    深入講解Python編程中的字符串

    這篇文章主要介紹了Python編程中的字符串,包括字符串的格式化與三引號的使用等,需要的朋友可以參考下
    2015-10-10
  • 詳解Python查找誰刪了你的微信

    詳解Python查找誰刪了你的微信

    微信好友長時間不聯(lián)系就可能被對方刪除,但是微信也不會主動通知你。那么我們就來用python寫一個工具查驗一下誰刪除了你的微信
    2022-02-02
  • Python解釋器以及PyCharm的安裝教程圖文詳解

    Python解釋器以及PyCharm的安裝教程圖文詳解

    PyCharm是一種Python IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具。這篇文章主要介紹了Python解釋器以及PyCharm的安裝教程圖文詳解,需要的朋友可以參考下
    2020-02-02
  • 替換python字典中的key值方法

    替換python字典中的key值方法

    今天小編就為大家分享一篇替換python字典中的key值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python2與Python3的區(qū)別實(shí)例總結(jié)

    Python2與Python3的區(qū)別實(shí)例總結(jié)

    這篇文章主要介紹了Python2與Python3的區(qū)別,結(jié)合實(shí)例形式總結(jié)分析了Python2與Python3打印輸出、編碼、數(shù)值運(yùn)算、異常處理等使用區(qū)別,需要的朋友可以參考下
    2019-04-04
  • Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析

    Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析

    這篇文章主要介紹了Python爬蟲圖片懶加載技術(shù) selenium和PhantomJS解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python內(nèi)存動態(tài)分配過程詳解

    python內(nèi)存動態(tài)分配過程詳解

    這篇文章主要介紹了python內(nèi)存動態(tài)分配過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07

最新評論