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

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

 更新時(shí)間:2016年11月28日 11:33:58   投稿:daisy  
大家在做爬蟲(chóng)的時(shí)候,很容易保持一些相似的數(shù)據(jù),這些相似的數(shù)據(jù)由于不完全一致,如果要通過(guò)人工一一的審核,將耗費(fèi)大量的時(shí)間,大家對(duì)編輯距離應(yīng)該有所了解,這篇文章我們先來(lái)了解下什么是編輯距離,然后在學(xué)習(xí)Python如何計(jì)算編輯距離,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

編輯距離

編輯距離(Edit Distance),又稱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類型,而在 string 類型中,默認(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ì)算編輯距離(也稱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 – ldist) / sum, 其中sum是指str1 和 str2 字串的長(zhǎng)度總和,ldist是類編輯距離。注意這里是類編輯距離,在類編輯距離中刪除、插入依然+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–Winkler距離,而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

相關(guān)文章

  • Pytorch可視化之Visdom使用實(shí)例

    Pytorch可視化之Visdom使用實(shí)例

    Visdom 是一個(gè)專門用于 PyTorch 的交互式可視化工具,可以對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行豐富的可視化,幫助我們實(shí)時(shí)監(jiān)控在遠(yuǎn)程服務(wù)器上進(jìn)行的科學(xué)實(shí)驗(yàn),這篇文章主要給大家介紹了關(guān)于Pytorch可視化之Visdom使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python用sndhdr模塊識(shí)別音頻格式詳解

    Python用sndhdr模塊識(shí)別音頻格式詳解

    這篇文章主要介紹了Python用sndhdr模塊識(shí)別音頻格式詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python?pytest自動(dòng)化測(cè)試庫(kù)十個(gè)強(qiáng)大用法示例

    Python?pytest自動(dòng)化測(cè)試庫(kù)十個(gè)強(qiáng)大用法示例

    本文將介紹Python的pytest庫(kù)的10個(gè)強(qiáng)大用法,并提供相應(yīng)的代碼示例,幫助你更好地理解和應(yīng)用單元測(cè)試,它提供了許多高級(jí)功能和便利的用法,能夠讓我們更輕松地編寫(xiě)和執(zhí)行單元測(cè)試
    2024-01-01
  • python中的單下劃線與雙下劃線以及絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入

    python中的單下劃線與雙下劃線以及絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入

    這篇文章主要介紹了python中的單下劃線與雙下劃線以及絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 給Python初學(xué)者的一些編程技巧

    給Python初學(xué)者的一些編程技巧

    這篇文章主要介紹了給Python初學(xué)者的一些編程技巧,皆是基于基礎(chǔ)的一些編程習(xí)慣建議,需要的朋友可以參考下
    2015-04-04
  • python中Flask?Web?表單的使用方法介紹

    python中Flask?Web?表單的使用方法介紹

    這篇文章主要介紹了python中Flask?Web?表單的使用方法介紹,表單的操作是Web程序開(kāi)發(fā)中最核心的模塊之一,絕大多數(shù)的動(dòng)態(tài)交互功能都是通過(guò)表單的形式實(shí)現(xiàn)的。更多介紹需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • python將寫(xiě)好的程序打包成exe可執(zhí)行文件

    python將寫(xiě)好的程序打包成exe可執(zhí)行文件

    這篇文章主要介紹了python寫(xiě)好的程序打包成exe可執(zhí)行文件,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • python方向鍵控制上下左右代碼

    python方向鍵控制上下左右代碼

    這篇文章主要介紹了python方向鍵控制上下左右代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python方差特征過(guò)濾的實(shí)例分析

    Python方差特征過(guò)濾的實(shí)例分析

    在本篇文章里小編給大家整理了一篇關(guān)于Python方差特征過(guò)濾的實(shí)例分析內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-08-08
  • 通過(guò)pykafka接收Kafka消息隊(duì)列的方法

    通過(guò)pykafka接收Kafka消息隊(duì)列的方法

    今天小編就為大家分享一篇通過(guò)pykafka接收Kafka消息隊(duì)列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12

最新評(píng)論