欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python文本相似性計(jì)算之編輯距離詳解

系統(tǒng) 2225 0

編輯距離

編輯距離(Edit Distance),又稱(chēng)Levenshtein距離,是指兩個(gè)字串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù)。編輯操作包括將一個(gè)字符替換成另一個(gè)字符,插入一個(gè)字符,刪除一個(gè)字符。一般來(lái)說(shuō),編輯距離越小,兩個(gè)串的相似度越大。

例如將kitten一字轉(zhuǎn)成sitting:('kitten' 和 ‘sitting' 的編輯距離為3)

???? sitten (k→s)

???? sittin (e→i)

???? sitting (→g)

Python中的Levenshtein包可以方便的計(jì)算編輯距離

包的安裝: pip install python-Levenshtein

我們來(lái)使用下:

            
# -*- coding:utf-8 -*-
import Levenshtein
texta = '艾倫 圖靈傳'
textb = '艾倫?圖靈傳'
print Levenshtein.distance(texta,textb)
          

上面的程序執(zhí)行結(jié)果為3,但是只改了一個(gè)字符,為什么會(huì)發(fā)生這樣的情況?

原因是Python將這兩個(gè)字符串看成string類(lèi)型,而在 string 類(lèi)型中,默認(rèn)的 utf-8 編碼下,一個(gè)中文字符是用三個(gè)字節(jié)來(lái)表示的。

解決辦法是將字符串轉(zhuǎn)換成unicode格式,即可返回正確的結(jié)果1。

            
# -*- coding:utf-8 -*-
import Levenshtein
texta = u'艾倫 圖靈傳'
textb = u'艾倫?圖靈傳'
print Levenshtein.distance(texta,textb)
          

接下來(lái)重點(diǎn)介紹下保重幾個(gè)方法的作用:

            
Levenshtein.distance(str1, str2)
          

計(jì)算編輯距離(也稱(chēng)Levenshtein距離)。是描述由一個(gè)字串轉(zhuǎn)化成另一個(gè)字串最少的操作次數(shù),在其中的操作包括插入、刪除、替換。算法實(shí)現(xiàn):動(dòng)態(tài)規(guī)劃。

            
Levenshtein.hamming(str1, str2)
          

計(jì)算漢明距離。要求str1和str2必須長(zhǎng)度一致。是描述兩個(gè)等長(zhǎng)字串之間對(duì)應(yīng)位置上不同字符的個(gè)數(shù)。

            
Levenshtein.ratio(str1, str2)
          

計(jì)算萊文斯坦比。計(jì)算公式? r = (sum ?C ldist) / sum , 其中sum是指str1 和 str2 字串的長(zhǎng)度總和,ldist是類(lèi)編輯距離。注意這里是類(lèi)編輯距離,在類(lèi)編輯距離中刪除、插入依然+1,但是替換+2。

            
Levenshtein.jaro(s1, s2)
          

計(jì)算jaro距離,Jaro Distance據(jù)說(shuō)是用來(lái)判定健康記錄上兩個(gè)名字是否相同,也有說(shuō)是是用于人口普查,我們先來(lái)看一下Jaro Distance的定義。

兩個(gè)給定字符串S1和S2的Jaro Distance為:


其中的m為s1, s2匹配的字符數(shù),t是換位的數(shù)目。

兩個(gè)分別來(lái)自S1和S2的字符如果相距不超過(guò)

時(shí),我們就認(rèn)為這兩個(gè)字符串是匹配的;而這些相互匹配的字符則決定了換位的數(shù)目t,簡(jiǎn)單來(lái)說(shuō)就是不同順序的匹配字符的數(shù)目的一半即為換位的數(shù)目t。舉例來(lái)說(shuō),MARTHA與MARHTA的字符都是匹配的,但是這些匹配的字符中,T和H要換位才能把MARTHA變?yōu)镸ARHTA,那么T和H就是不同的順序的匹配字符, t=2/2=1

兩個(gè)字符串的Jaro Distance即為:


            
Levenshtein.jaro_winkler(s1, s2)
          

計(jì)算Jaro?CWinkler距離,而Jaro-Winkler則給予了起始部分就相同的字符串更高的分?jǐn)?shù),他定義了一個(gè)前綴p,給予兩個(gè)字符串,如果前綴部分有長(zhǎng)度為ι的部分相同,則Jaro-Winkler Distance為:


????? dj是兩個(gè)字符串的Jaro Distance

????? ι是前綴的相同的長(zhǎng)度,但是規(guī)定最大為4

????? p則是調(diào)整分?jǐn)?shù)的常數(shù),規(guī)定不能超過(guò)25,不然可能出現(xiàn)dw大于1的情況,Winkler將這個(gè)常數(shù)定義為0.1

這樣,上面提及的MARTHA和MARHTA的Jaro-Winkler Distance為:

            
dw = 0.944 + (3 * 0.1(1 ? 0.944)) = 0.961
          

個(gè)人覺(jué)得算法可以完善的點(diǎn):

????? 去除停用詞(主要是標(biāo)點(diǎn)符號(hào)的影響)

????? 針對(duì)中文進(jìn)行分析,按照詞比較是不是要比按照字比較效果更好?

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用python能有所幫助,如果有疑問(wèn)大家可以留言交流。

其他參考資料:

https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance

http://www.coli.uni-saarland.de/courses/LT1/2011/slides/Python-Levenshtein.html#Levenshtein-inverse


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: va在线播放| 中国一级毛片视频 | 91精选国产91在线观看 | 日日摸夜夜摸人人嗷嗷叫 | 国产成人综合网在线观看 | 搞黄网站免费观看 | 91成人午夜性a一级毛片 | 毛片免费观看 | 色婷婷社区 | 国产毛片一级 | 亚洲视频在线看 | 欧美午夜影院 | 亚洲精品国偷拍自产在线观看 | 天堂在线观看中文字幕 | 欧美亚洲视频在线观看 | 狠狠色噜噜狠狠狠狠97老肥女 | 一级@片| 午夜剧场直接免费观看 | 日本高清在线中文字幕网 | 日本免费在线一区 | 日操夜操天天操 | 日本无码少妇波多野结衣 | 国内精品一区二区三区最新 | 欧美成人久久一级c片免费 91在线免费视频 | 奇米奇米 | 99久久久国产精品免费观看 | 丁香婷婷综合五月六月 | 天天操狠狠操夜夜操 | 手机国产日韩高清免费看片 | 欧美精品一区二区三区在线播放 | 2021最新国产精品一区 | 国内精品一区二区在线观看 | 99久久精品日本一区二区免费 | 日本精品视频 | 久久久91精品国产一区二区三区 | 欧美日韩综合在线视频免费看 | 亚洲视频免费在线播放 | 高清在线一区二区 | 日韩aⅴ一区二区三区 | 欧美aⅴ在线观看 | 色诱成人免费观看视频 |