1. 程式人生 > >python fuzzywuzzy模組 模糊字串匹配詳細用法

python fuzzywuzzy模組 模糊字串匹配詳細用法

匯入:

>>> from fuzzywuzzy import fuzz
>>> from fuzzywuzzy import process

1)

>>> fuzz.ratio("this is a test", "this is a test!")
out    97
>>> fuzz.partial_ratio("this is a test", "this is a test!")
out    100

fuzz.ratio()對位置敏感,全匹配。fuzz.partial_ratio()對位置敏感,搜尋匹配。

2)

>>> fuzz._process_and_sort(s, force_ascii, full_process=True)

對字串s排序。force_ascii:True 或者False。為True表示轉換為ascii碼。如果full_process為True,則會將字串s轉換為小寫,去掉除字母和數字之外的字元(發現不能去掉-字元),剩下的字串以空格分開,然後排序。如果為False,則直接對字串s排序。

>>> fuzz._token_sort(s1, s2, partial=True, force_ascii=True, full_process=True
)

給出字串 s1, s2的相似度。首先經過 fuzz._process_and_sort()函式處理。partial為True時,再經過fuzz.partial_ratio()函式。partial為False時,再經過fuzz.ratio()函式。

>>> fuzz.token_sort_ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")
out    100

partial為False的_token_sort()

fuzz.partial_token_sort_ratio(s1, s2, force_ascii=True
, full_process=True)

就是partial為True時的Fuzz._token_sort()

3)

>>> fuzz.token_set_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")
out    100
fuzz._token_set(s1, s2, partial=True, force_ascii=True, full_process=True)

當partial為False時,就是 fuzz.token_set_ratio()函式。

fuzz.partial_token_set_ratio(s1, s2, force_ascii=True, full_process=True)

partial為True的fuzz._token_set()函式。

4)

fuzz.QRatio(s1, s2, force_ascii=True, full_process=True)

full_process為True時,經過utils.full_process()函式。然後經過fuzz.ratio()函式。對順序敏感。

fuzz.UQRatio(s1, s2, full_process=True)

就是 force_ascii為False的fuzz.QRatio()函式。

fuzz.WRatio(s1, s2, force_ascii=True, full_process=True)

使用另一種不同演算法計算相似度。對順序敏感。

UWRatio(s1, s2, full_process=True)

是force_ascii為False的fuzz.WRatio()函式。

總結:如果計算相似度的字串只有字母和數字,直接可以用ratio()和partial_ratio()。但如果還有其他字元,而且我們想要去掉這些沒用字元,就用下邊的。下邊的函式都對順序不敏感,但token_sort_ratio()系列是全字元匹配,不管順序。而token_set_ratio()只要第二個字串包含第一個字串就100,不管順序。

5)

>>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
>>> process.extract("new york jets", choices, limit=2)
    [('New York Jets', 100), ('New York Giants', 78)]
>>> process.extractOne("cowboys", choices)
    ("Dallas Cowboys", 90)
>>> process.extract(query, choices, processor=default_processor, scorer=default_scorer, limit=5)

query是字串,choices是陣列,元素是字串。 processor是對輸入比較的字串的處理函式,預設是fuzzywuzzy.utils.full_process(),即將字串變為小寫, 去掉除字母和數字之外的字元(發現不能去掉-字元),剩下的字串以空格分開。scorer計算兩個字串相似度的函式,預設fuzz.WRatio()。 limit是輸出個數。
輸出為陣列,元素為元組,元祖第一個匹配到的字串,第二個為int型,為score。對輸出按照score排序。

>>> process.extractWithoutOrder(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0)

score_cutoff為一個閾值,當score小於該閾值時,不會輸出。返回一個生成器,輸出每個大於 score_cutoff的匹配,按順序輸出,不排序。

>>> process.extractBests(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0, limit=5)

process.extractBests()和process.extract()都呼叫了process.extractWithoutOrder(),只不過process.extractBests()能傳輸 score_cutoff。

>>> process.extractOne(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0)

也呼叫了process.extractWithoutOrder(),只不過輸出一個score最高的值。

process.dedupe(contains_dupes, threshold=70, scorer=fuzz.token_set_ratio)

contains_dupes是陣列,元素為字串。
取出相似度小於 threshold的字串,相似度大於 threshold的字串取最長一個。

相關推薦

python fuzzywuzzy模組 模糊字串匹配詳細用法

匯入: >>> from fuzzywuzzy import fuzz >>> from fuzzywuzzy import process 1) >>> fuzz.ratio("this

python 爬蟲 提取文字之BeautifulSoup詳細用法

提取 網頁內容 四大基本方法之 2.beautifulsoup的使用 bs4模組 準備程式碼資訊,用來練習獲取內容: from bs4 import BeautifulSoup #準備程式碼資訊,用來

[Python開發]Python中struct.pack()和struct.unpack()用法詳細說明

python中的struct主要是用來處理C結構資料的,讀入時先轉換為Python的字串型別,然後再轉換為Python的結構化型別,比如元組(tuple)啥的~。一般輸入的渠道來源於檔案或者網路的二進位制流。   1.struct.pack()和struct.unpack() 在轉化

python動態載入子模組 根據字串繫結子模組 如載入os.path

基本動態載入模組方法 x = __import__("os") x.path # out: <module 'posixpath' from 'xxx'> 動態載入子模組 直接載入用__import("os.path")__是不行的 可行方法:

CCF Python題解(100分)201409-3 字串匹配

CCF Python題解(100分)201409-3 字串匹配 import re s = input() flag = input() # 1大小寫敏感 n = int(input()) for i in range(n): inputstr = input() i

LeetCode 942. 增減字串匹配(C、C++、python

給定只含 "I"(增大)或 "D"(減小)的字串 S ,令 N = S.length。 返回 [0, 1, ..., N] 的任意排列 A 使得對於所有 i = 0, ..., N-1,

Python 正則表示式,re模組,match匹配(預設從開頭匹配),分組

  單個字元: 數量詞: 匹配開頭、結尾: 匹配分組:   demo.py(正則表示式,match從開頭匹配,分組,分組別名): # coding=utf-8 import re # 小括號()表示分組 \1表示取出第

python日期模組datetime常用操作總結(字串與datetime物件互轉、日期差值計算、時間戳獲取、時間陣列生成等)

     在python中,自帶的datetime和time兩個時間模組在平時的使用中可以滿足我們絕大多數的需求,但是由於缺乏對這些模組深度的瞭解和使用,導致平時能夠使用到的時間功能十分有限,例如:對於time模組,我的使用幾乎就是停留在程式執行時間的統計和時間戳生成這

python ccf題解 201409-3 字串匹配

問題描述   給出一個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項:當選項開啟時,表示同一個字母的大寫和小寫看作不同的字元;當選項關閉時,表示同一個字母的大寫和小寫看作相同的字元。 輸入格式   輸入的第一行包含一個字串S,由大小寫英文字母組

python加速模組numba的用法

--------------程式碼部分------------ import numba as nb import time # 普通的 for def add1(t): start = time.time() s=0 for i in range(

python file模組中的文字檔案和二進位制檔案以及字串和byte的理解

大前提:文字檔案和二進位制檔案都是以二進位制的方式存放到硬碟中的 看圖先~ 1. Python file讀寫加不加b w 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 wb

python列表,元組,字串的基礎用法大全

python的基本操作 列表中的函式 1,append函式的用法 print("l.append,只能新增到列表末尾,新增的資料型別不限") l=[0,1,2,3,4] print("原來的給定的列表為:",l) l.append(5) print("如果新增一

c#呼叫python的四種方法(嘗試了四種,只詳細講解本人成功的後兩種,其餘方法只列出,詳細用法請自行谷歌百度)

一、使用c#,nuget管理包上下載的ironPython安裝包      嘗試後發現,對引用了numpy等第三方庫的python程式碼,會報找不到模組xxx的錯誤,上網查證後發現此問題基本難以解決 二、使用c++程式呼叫python檔案,然後將其做成動態連結庫

Python中struct pack 和struct unpack 用法詳細說明

                python中的struct主要是用來處理C結構資料的,讀入時先轉換為Python的字串型別,然後再轉換為Python的結構化型別,比如元組(tuple)啥的~。一般輸入的渠道來源於檔案或者網路的二進位制流。1.struct.pack()和struct.unpack()在轉化過

python 正則表示式 字串匹配 替換 分割 查詢

In [1]: import re In [2]: str1='imooc video=1000' In [3]: str1.find('1000')#可以查找出索引值 Out[3]:

Python time模組,時間戳,時間元祖,字串相互轉換與時間加減

獲取時間戳import time timestamp = time.time() print(timestamp) 1531366876.4177334時間戳是指格林威治時間1970年01月01日00

Python 模組大全(很詳細!)

"We'd like to pretend that 'Fredrik' is a role, but even hundreds of volunteers couldn't possibly keep up. No, 'Fredrik' is the re

Python 不確定函式,通過字串匹配呼叫的方法

#!/usr/bin/env python # encoding: utf-8 ''' @author: morgan lions @time: 8/10/18 9:57 AM ''' from __future__ import print_function def func_day(

python-進階教程-利用萬用字元進行字串匹配

0.摘要 在Linux Shell中,我們可以用ls *.py的命令顯示所有以.py結尾的檔案或資料夾。在python中我們可以藉助fnmatch模組,實現含萬用字元的字串匹配。   1.常用萬用字元 符號 作用

python五十一:動態匯入模組,通過字串匯入模組

目錄結構如下:    # 動態匯入模組方式一: byd = __import__("car.BYD") # 返回的是最頂層的模組 print(byd) # byd.run() byd.BYD.run() # byd是最頂層的模組,所以還要通過 .BYD找到BYD模組