日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模糊查询_python实现字符串模糊匹配

發布時間:2025/3/19 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模糊查询_python实现字符串模糊匹配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前筆者寫過一篇文章關于如何做搜索,但那篇文章的角度是從文本相似度角度寫的。那種方式是目前發展的趨勢,但是真正的搜索特別是網頁搜索不可能在大范圍的文本之間兩兩算相似度的。那樣搜索引擎的效率會變得特別低下。本文將從字符串模糊匹配的角度介紹一下搜索引擎。

一般的搜索,要分為兩個步驟:搜索和排序。搜索的方法有很多,為了高效一般進行字符串或關鍵詞匹配,而用戶提供的一些關鍵詞可能不是數據庫中保存的,例如使用倒排的方法很難找到Head節點,此處需要使用模糊匹配的方式。這里簡單列舉一下Learning-to-Rank排序的方法:BM25算法、TF-IDF算相似度、SVD奇異值分解(主題模型)得到向量表示算相似度、再就是之前介紹的文本相似度計算的方法。如果是網頁的排序,可能會涉及到網址質量好壞需要使用PageRank排序算法等。

本文主要從模糊匹配的角度,簡單介紹下搜索。主要解決的問題類似,“劉得華演過的電影”與“劉德華演過的電影”表示的是同一個意思。

1. 編輯距離

首先給大家介紹一下編輯距離,編輯距離就是用于衡量兩個字符串之間的差異。具體描述為:string1通過多少次最少操作(增添字符、刪除字符、替換字符)得到string2,最少操作的次數就定義為編輯距離。例如句子劉得華演過的電影”與“劉德華演過的電影”只需要一次替換“得”為“德”,所以二者之間的距離為1。如果兩個字符串S1和S2,長度分別為i,j。那么二者之間的距離D(i,j)可以表示為:

(1)min(i,j)==0,即S1,S2中存在空字符串

D(i,j)=max(i,j)

(2)min(i,j) != 0,

去掉S1或S2的最后一個字符進行比較,分別得到距離

D(i,j-1), D(i-1,j),D(i-1,j-1)

由動態規劃的思想可以得到:

D(i,j) = min{D(i,j-1), D(i-1,j),D(i-1,j-1)+sigma(i,j)} 其中sigma(i,j)取值為0或 1,1表示S1和S2最后一個字符不相同,0表示相同。具體實現如下:

intLevenshteinDistance(constchar*s,intlen_s,constchar*t,intlen_t){intcost;if(len_s==)returnlen_t;if(len_t==)returnlen_s;if(s[len_s-1]==t[len_t-1])cost=;elsecost=1;returnminimum(LevenshteinDistance(s,len_s-1,t,len_t)+1,LevenshteinDistance(s,len_s,t,len_t-1)+1,LevenshteinDistance(s,len_s-1,t,len_t-1)+cost);}

2. fuzzywuzzy

Python提供fuzzywuzzy模塊,不僅可用于計算兩個字符串之間的相似度,而且還提供排序接口能從大量候選集中找到最相似的句子。

(1)安裝

需要安裝python-Levenshtein庫用于計算上述講解的編輯距離。

pip install python-Levenshtein

pip install fuzzywuzzy

(2)接口說明

兩個模塊:fuzz, process,fuzz主要用于兩字符串之間匹配,process主要用于搜索排序。

fuzz.ratio(s1,s2)直接計算s2和s2之間的相似度,返回值為0-100,100表示完全相同;

fuzz.partial_ratio(S1,S2)部分匹配,如果S1是S2的子串依然返回100;

fuzz.token_sort_ratio(S1,S2)只比較S1,S2單詞是否相同,不考慮詞語之間的順序;

fuzz.token_set_ratio(S1,S2)相比fuzz.token_sort_ratio不考慮詞語出現的次數;

process.extract(S1, ListS,limit=n),表示從列表ListS中找出Top n與S1最相似的句子;

process.extractOne(S1,ListS),返回最相似的一個

(3)使用

運行結果:

說明str1和str2之間相似度是對稱的。

總結

以上是生活随笔為你收集整理的python模糊查询_python实现字符串模糊匹配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。