linux環(huán)境下,沒有首先安裝python_Levenshtein,用法如下:

公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出豐縣免費(fèi)做網(wǎng)站回饋大家。
重點(diǎn)介紹幾個(gè)該包中的幾個(gè)計(jì)算字串相似度的幾個(gè)函數(shù)實(shí)現(xiàn)。
1. Levenshtein.hamming(str1, str2)
計(jì)算漢明距離。要求str1和str2必須長度一致。是描述兩個(gè)等長字串之間對應(yīng)位置上不同字符的個(gè)數(shù)。如
2. Levenshtein.distance(str1, str2)
計(jì)算編輯距離(也成Levenshtein距離)。是描述由一個(gè)字串轉(zhuǎn)化成另一個(gè)字串最少的操作次數(shù),在其中的操作包括插入、刪除、替換。如
算法實(shí)現(xiàn) 參考動(dòng)態(tài)規(guī)劃整理:。
3. Levenshtein.ratio(str1, str2)
計(jì)算萊文斯坦比。計(jì)算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的長度總和,ldist是類編輯距離
注意:這里的類編輯距離不是2中所說的編輯距離,2中三種操作中每個(gè)操作+1,而在此處,刪除、插入依然+1,但是替換+2
這樣設(shè)計(jì)的目的:ratio('a', 'c'),sum=2,按2中計(jì)算為(2-1)/2 = 0.5,’a','c'沒有重合,顯然不合算,但是替換操作+2,就可以解決這個(gè)問題。
4. Levenshtein.jaro(s1, s2)
計(jì)算jaro距離,
其中的m為s1, s2的匹配長度,當(dāng)某位置的認(rèn)為匹配 當(dāng)該位置字符相同,或者在不超過
t是調(diào)換次數(shù)的一半
5. Levenshtein.jaro_winkler(s1, s2)
計(jì)算Jaro–Winkler距離
僅限沒有重復(fù)的情況。
gt;gt;gt; a=[1,2,3,4,5,6]
gt;gt;gt; b=[1,2,3]
gt;gt;gt; set(a)-set(b)
set([4, 5, 6])
如果要考慮重復(fù)的話,就有點(diǎn)麻煩了:
from math import fabs
def compare(list1,list2):
nbsp;nbsp;nbsp;dict1=dict()
nbsp;nbsp;nbsp;dict2=dict()
nbsp;nbsp;nbsp;total = list(set(list1+list2))
nbsp;nbsp;nbsp;dif = []
nbsp;nbsp;nbsp;for i in list1:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) in dict1:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict1[str(i)] += 1
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict1[str(i)] = 1
nbsp;nbsp;nbsp;for i in list2:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) in dict2:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict2[str(i)] += 1
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict2[str(i)] = 1
nbsp;nbsp;nbsp;for i in total:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) not in dict1 or str(i) not in dict2:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) in dict1:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;for num in range(int(dict1[str(i)])):
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dif.append(i)
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;for num in range(int(dict2[str(i)])):
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dif.append(i)
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;count = fabs(int(dict1[str(i)])-int(dict2[str(i)]))
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;for num in range(int(count)):
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dif.append(i)
nbsp;nbsp;nbsp;return dif
a=[1,1,1,1,2,3,4,4,4,5,6,7,8,9]
b=[2,2,2,2,3,4,4,4,4,5,6,7,8,9,10,11]
print compare(a,b)
方法用錯(cuò)了, 首先不能是DataFrame的applymap方法 這個(gè)方法是對每一個(gè)元素進(jìn)行處理的
其次, 處理函數(shù)(你的func_wd)是接受一個(gè)值, 返回一個(gè)值, 不是接受一堆值然后循環(huán)
def func_wd(x) 這個(gè)x就是wd那一列中的某一個(gè)值, 里面直接分支返回就行了:
在map這個(gè)方法的時(shí)候, 用Series的apply:
data['wd'] = data['wd'].apply(fuc_wd)
這樣就行了
可以直接使用python的內(nèi)建函數(shù)cmp():
s1='hello'
s2='hell'
s3='hello?world'
s4='hello'
cmp(s1,s2)
#輸出結(jié)果為1
cmp(s1,s3)
#輸出結(jié)果為-1
cmp(s1,s4)
#輸出結(jié)果為0
當(dāng)前名稱:python中的比較函數(shù),python的函數(shù)和方法區(qū)別
文章鏈接:http://chinadenli.net/article16/dsshdgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、自適應(yīng)網(wǎng)站、營銷型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)