最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python文本相似性計算之編輯距離詳解

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

編輯距離

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

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

     sitten (k→s)

     sittin (e→i)

     sitting (→g)

Python中的Levenshtein包可以方便的計算編輯距離

包的安裝: pip install python-Levenshtein

我們來使用下:

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

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

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

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

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

接下來重點介紹下保重幾個方法的作用:

Levenshtein.distance(str1, str2)

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

Levenshtein.hamming(str1, str2)

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

Levenshtein.ratio(str1, str2)

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

Levenshtein.jaro(s1, s2)

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

兩個給定字符串S1和S2的Jaro Distance為:


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

兩個分別來自S1和S2的字符如果相距不超過

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

兩個字符串的Jaro Distance即為:


Levenshtein.jaro_winkler(s1, s2)

計算Jaro–Winkler距離,而Jaro-Winkler則給予了起始部分就相同的字符串更高的分數(shù),他定義了一個前綴p,給予兩個字符串,如果前綴部分有長度為ι的部分相同,則Jaro-Winkler Distance為:


      dj是兩個字符串的Jaro Distance

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

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

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

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

個人覺得算法可以完善的點:

      去除停用詞(主要是標(biāo)點符號的影響)

      針對中文進行分析,按照詞比較是不是要比按照字比較效果更好?

總結(jié)

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

其他參考資料:

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)文章

  • Python 在局部變量域中執(zhí)行代碼

    Python 在局部變量域中執(zhí)行代碼

    這篇文章主要介紹了Python 如何在局部變量域中執(zhí)行代碼,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • 詳解Python list 與 NumPy.ndarry 切片之間的對比

    詳解Python list 與 NumPy.ndarry 切片之間的對比

    這篇文章主要介紹了詳解Python list 與 NumPy.ndarry 切片之間的區(qū)別的相關(guān)資料,list 切片返回的是不原數(shù)據(jù),對新數(shù)據(jù)的修改不會影響原數(shù)據(jù)而NumPy.ndarry 的切片返回的是原數(shù)據(jù)需要的朋友可以參考下
    2017-07-07
  • python list的index()和find()的實現(xiàn)

    python list的index()和find()的實現(xiàn)

    這篇文章主要介紹了python list的index()和find()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python狀態(tài)機transitions庫詳解

    python狀態(tài)機transitions庫詳解

    在用python做一個比較復(fù)雜的小項目,需要根據(jù)不同的輸入,控制攝像頭采集執(zhí)行不同的任務(wù).雖然用流程方式實現(xiàn)了,但閱讀起來費勁,還容易出錯.所以就用了狀態(tài)機,需要的朋友可以參考下
    2021-06-06
  • Django集成搜索引擎Elasticserach的方法示例

    Django集成搜索引擎Elasticserach的方法示例

    這篇文章主要介紹了Django集成搜索引擎Elasticserach的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python3.9實現(xiàn)pyinstaller打包python文件成exe

    python3.9實現(xiàn)pyinstaller打包python文件成exe

    這篇文章主要介紹了python3.9實現(xiàn)pyinstaller打包python文件成exe,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python協(xié)程的四種實現(xiàn)方式總結(jié)

    Python協(xié)程的四種實現(xiàn)方式總結(jié)

    今天繼續(xù)給大家介紹Python關(guān)知識,本文主要內(nèi)容是Python協(xié)程的四種實現(xiàn)方式。文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • python對url格式解析的方法

    python對url格式解析的方法

    這篇文章主要介紹了python對url格式解析的方法,涉及Python針對URL解析的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • python 實現(xiàn)多維數(shù)組轉(zhuǎn)向量

    python 實現(xiàn)多維數(shù)組轉(zhuǎn)向量

    今天小編就為大家分享一篇python 實現(xiàn)多維數(shù)組轉(zhuǎn)向量,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python將時分秒轉(zhuǎn)換成秒的實例

    python將時分秒轉(zhuǎn)換成秒的實例

    今天小編就為大家分享一篇python將時分秒轉(zhuǎn)換成秒的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

南皮县| 安阳市| 连城县| 喜德县| 南川市| 信丰县| 嘉黎县| 通渭县| 故城县| 蛟河市| 芮城县| 格尔木市| 社会| 南华县| 隆昌县| 额敏县| 中江县| 石屏县| 岚皋县| 钟祥市| 孟津县| 汤原县| 三穗县| 黄山市| 离岛区| 广水市| 棋牌| 克什克腾旗| 资源县| 德格县| 施甸县| 宝清县| 南漳县| 孙吴县| 浮山县| 朔州市| 郧西县| 英吉沙县| 电白县| 安龙县| 太仓市|