亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中匹配模糊的字符串問題分析

 更新時間:2023年09月13日 14:50:24   作者:python學習者0  
這篇文章主要介紹了Python中匹配模糊的字符串的過程,我們將學習如何使用process 模塊,該模塊允許我們在模糊字符串邏輯的幫助下有效地匹配或提取字符串,需要的朋友可以參考下

如何使用thefuzz 庫,它允許我們在python中進行模糊字符串匹配。此外,我們將學習如何使用process 模塊,該模塊允許我們在模糊字符串邏輯的幫助下有效地匹配或提取字符串。

使用thefuzz 模塊來匹配模糊字符串

這個庫在舊版本中有一個有趣的名字,因為它有一個特定的名字,這個名字被重新命名。所以現(xiàn)在是由不同的庫來維護;但是,它目前的版本叫做thefuzz ,所以這就是你可以通過下面的命令來安裝的。

pip install thefuzz

但是,如果你在網上看例子,你會發(fā)現(xiàn)一些例子的舊名稱是fuzzywuzzy 。所以,它已經不再被維護并且過時了,但是你可能會發(fā)現(xiàn)一些用這個名字的例子。

thefuzz 庫是基于 ,所以你必須用這個命令來安裝它。python-Levenshtei

pip install python-Levenshtein

而如果你在安裝過程中遇到一些問題,你可以使用下面的命令,如果再次遇到錯誤,那么你可以在google上搜索,找到相關的解決方案。

pip install python-Levenshtein-wheels

本質上,模糊匹配字符串就像使用regex或沿著兩個字符串的比較。在模糊邏輯的情況下,你的條件的真值可以是0 和1 之間的任何實數。

因此,基本上,不是說任何東西是True 或False ,你只是給它在0 到1 之間的任何值。它是通過使用距離度量計算兩個字符串之間的不相似性,其形式是一個稱為距離的值。

使用給定的字符串,你使用一些算法找到兩個字符串之間的距離。一旦你完成了安裝過程,你必須從thefuzz 模塊中導入fuzz 和process 。

from thefuzz import fuzz, process

在使用fuzz ,我們將手動檢查兩個字符串之間的不相似性。

ST1='Just a test'
ST2='just a test'
print(ST1==ST2)
print(ST1!=ST2)

它將返回一個布爾值,但以一種模糊的方式,你會得到這些字符串的相似程度的百分數。

False
True

模糊字符串匹配允許我們以模糊的方式更有效、更快速地完成這項工作。假設我們有一個例子,有兩個字符串,其中一個字符串與大寫的J (如上所述)不相同。

如果我們現(xiàn)在去調用ratio() 函數,它給我們一個相似性的度量,那么這將為我們提供一個相當高的比率,即91 ,而不是100 。

from thefuzz import fuzz, process
print(fuzz.ratio(ST1, ST2))

輸出:

91

如果字符串更加延長,例如,如果我們不只是改變一個字符,而是改變一個完全不同的字符串,那么看看它的回報,看一看。

ST1='This is a test string for test'
ST2='There aresome test string for testing'
print(fuzz.ratio(ST1,ST2))

現(xiàn)在可能會有一些相似之處,但會很75 ;這只是一個簡單的比率,并不復雜。

75

我們還可以繼續(xù)嘗試像部分比例這樣的東西。例如,我們有兩個字符串,我們想確定它們的分數。

ST1='There are test'
ST2='There are test string for testing'
print(fuzz.partial_ratio(ST1,ST2))

使用partial_ratio() ,我們會得到100%,因為這兩個字符串有相同的子字符串(There are test)。

在ST2 ,我們有一些不同的詞(字符串),但這并不重要,因為我們看的是部分比率或個別部分,但簡單的比率并不類似。

100

假設我們有相似的字符串,但有不同的順序;然后,我們使用另一個度量。

CASE_1='This generation rules the nation'
CASE_2='Rules the nation This generation'

兩種情況下,在該短語的相同含義上有完全相同的文字,但使用ratio() ,就會有相當大的不同,而使用partial_ratio() ,就會有不同。

如果我們通過token_sort_ratio() ,這將是100%,因為它基本上是完全相同的文字,但順序不同。因此,這就是token_sort_ratio() ,該函數將單個標記進行排序,它們的順序并不重要。

print(fuzz.ratio(CASE_1,CASE_2))
print(fuzz.partial_ratio(CASE_1,CASE_2))
print(fuzz.token_sort_ratio(CASE_1,CASE_2))

輸出:

47
64
100

現(xiàn)在,如果我們用另一個詞來改變一些詞,我們會有一個不同的數字,但基本上,這是一個比率;它不關心個別標記的順序。

CASE_1='This generation rules the nation'
CASE_2='Rules the nation has This generation'
print(fuzz.ratio(CASE_1,CASE_2))
print(fuzz.partial_ratio(CASE_1,CASE_2))
print(fuzz.token_sort_ratio(CASE_1,CASE_2))

輸出:

44
64
94

token_sort_ratio() 也是不同的,因為它有更多的詞在里面,但我們也有一個叫做token_set_ratio() 的東西,一個集合包含每個標記只有一次。

所以,它出現(xiàn)的頻率并不重要;讓我們看看一個例子字符串。

CASE_1='This generation'
CASE_2='This This generation generation generation generation'
print(fuzz.ratio(CASE_1,CASE_2))
print(fuzz.partial_ratio(CASE_1,CASE_2))
print(fuzz.token_sort_ratio(CASE_1,CASE_2))
print(fuzz.token_set_ratio(CASE_1,CASE_2))

我們可以看到一些相當低的分數,但是我們使用token_set_ratio() 函數得到了100%的分數,因為我們有兩個令牌,This 和generation 存在于兩個字符串中。

使用process 模塊,以高效的方式使用模糊字符串匹配

不僅有fuzz ,還有process ,因為process 是有幫助的,可以使用這種模糊匹配從一個集合中提取出來。

例如,我們準備了幾個列表項來演示。

Diff_items=['programing language','Native language','React language',
        'People stuff', 'This generation', 'Coding and stuff']

其中一些是非常相似的,你可以看到(母語或編程語言),現(xiàn)在我們可以去挑選最好的個別匹配。

我們可以手動操作,只需評估分數,然后挑選出最優(yōu)秀的人選,但我們也可以用process 。要做到這一點,我們必須調用process 模塊中的extract() 函數。

它需要幾個參數,第一個是目標字符串,第二個是你要提取的集合,第三個是限制,將匹配或提取的內容限制為兩個。

例如,如果我們想提取像language ,在這種情況下,選擇母語和編程語言。

print(process.extract('language',Diff_items,limit=2))

輸出:

[('programing language', 90), ('Native language', 90)]

問題是,這不是NLP(自然語言處理);這背后沒有智能;它只是看單個標記。因此,舉例來說,如果我們使用programming 作為目標字符串并運行這個。

第一個匹配將是programming language ,但第二個匹配將是Native language ,這將不是編碼。

即使我們有編碼,因為從語義上講,編碼更接近于編程,但這并不重要,因為我們在這里沒有使用AI。

Diff_items=['programing language','Native language','React language',
        'People stuff', 'Hello World', 'Coding and stuff']
print(process.extract('programing',Diff_items,limit=2))

PYTHON 復制 全屏

輸出:

[('programing language', 90), ('Native language', 36)]

另一個最后的例子是這是如何有用的;我們有一個龐大的書庫,想找到一本書,但我們不知道確切的名字或如何調用它。

在這種情況下,我們可以使用extract() ,在這個函數里面,我們將把fuzz.token_sort_ratio 傳給scorer 參數。

LISt_OF_Books=['The python everyone volume 1 - Beginner',
               'The python everyone volume 2 - Machine Learning',
               'The python everyone volume 3 - Data Science',
               'The python everyone volume 4 - Finance',
               'The python everyone volume 5 - Neural Network',
               'The python everyone volume 6 - Computer Vision',
               'Different Data Science book',
               'Java everyone beginner book',
               'python everyone Algorithms and Data Structure']
print(process.extract('python Data Science',LISt_OF_Books,limit=3,scorer=fuzz.token_sort_ratio))

我們只是傳遞它,我們并沒有調用它,現(xiàn)在,我們在這里得到了最高的結果,我們得到了另一本數據科學書作為第二個結果。

輸出:

[('The python everyone volume 3 - Data Science', 63), ('Different Data Science book', 61), ('python everyone Algorithms and Data Structure', 47)]

這就是如何是相當準確的,如果你有一個項目,你必須以模糊的方式找到它,它可以相當有幫助。我們也可以用它來實現(xiàn)你的程序自動化。

還有一些額外的資源,你可以使用github和stackoverflow找到更多幫助。

到此這篇關于Python中匹配模糊的字符串的文章就介紹到這了,更多相關Python匹配模糊的字符串內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python 圖片轉數組,二進制互轉操作

    Python 圖片轉數組,二進制互轉操作

    這篇文章主要介紹了Python 圖片轉數組,二進制互轉操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 關于Python 中的時間處理包datetime和arrow的方法詳解

    關于Python 中的時間處理包datetime和arrow的方法詳解

    這篇文章主要介紹了關于Python 中的時間處理包datetime和arrow的相關知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • conda使用清華源設置channel的鏡像

    conda使用清華源設置channel的鏡像

    今天在下載OpenCV的時候發(fā)現(xiàn)清華的conda channel鏡像已經不能用了,conda需要設置的源是anaconda的源,本來就來介紹一下在conda使用清華源設置channel的鏡像的方法,感興趣的可以了解一下
    2021-05-05
  • python中的變量如何開辟內存

    python中的變量如何開辟內存

    python中的變量如何開辟內存?今天小編就為大家介紹一下python中變量開辟內存的方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python獲取網頁中所有圖片并篩選指定分辨率的方法

    python獲取網頁中所有圖片并篩選指定分辨率的方法

    下面小編就為大家分享一篇python獲取網頁中所有圖片并篩選指定分辨率的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • django-rest-swagger的優(yōu)化使用方法

    django-rest-swagger的優(yōu)化使用方法

    今天小編就為大家分享一篇django-rest-swagger的優(yōu)化使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python進行統(tǒng)計建模

    Python進行統(tǒng)計建模

    這篇文章主要介紹了Python進行統(tǒng)計建模的方法,幫助大家更好的理解和學習Python,感興趣的朋友可以了解下
    2020-08-08
  • Python函數參數和注解的使用

    Python函數參數和注解的使用

    本文介紹了Python函數的四種參數:定位參數、可變參數、默認值參數、關鍵字參數,和第五種Python3新特性參數:僅限關鍵字參數。函數注解是一種元數據,存在__annotations__屬性中,備注函數的參數和返回值的類型,它只是個注解,Python不會做任何強制檢查。
    2021-06-06
  • Python字典和集合編程技巧大總結

    Python字典和集合編程技巧大總結

    這篇文章主要給大家介紹了關于Python字典和集合編程技巧的相關資料,Python中的字典和集合是兩種非常常用的數據結構,它們可以幫助我們更方便地管理和操作數據,需要的朋友可以參考下
    2023-09-09
  • Python實現(xiàn)識別圖像中人物的示例代碼

    Python實現(xiàn)識別圖像中人物的示例代碼

    這篇文章主要介紹了通過face_recognition提供的demo代碼,簡單調整了一下,從而實現(xiàn)識別圖像中人物的功能,感興趣的可以跟隨小編一起試試
    2022-01-01

最新評論