字符串的相似性比較應用場合很多,像拼寫糾錯、文本去重、上下文相似性等。
創(chuàng)新互聯(lián)從2013年開始,公司以網(wǎng)站建設、成都網(wǎng)站制作、系統(tǒng)開發(fā)、網(wǎng)絡推廣、文化傳媒、企業(yè)宣傳、平面廣告設計等為主要業(yè)務,適用行業(yè)近百種。服務企業(yè)客戶成百上千家,涉及國內多個省份客戶。擁有多年網(wǎng)站建設開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設、創(chuàng)意設計、宣傳推廣等服務。 通過專業(yè)的設計、獨特的風格,為不同客戶提供各種風格的特色服務。評價字符串相似度最常見的辦法就是:把一個字符串通過插入、刪除或替換這樣的編輯操作,變成另外一個字符串,所需要的最少編輯次數(shù),這種就是編輯距離(edit distance)度量方法,也稱為Levenshtein距離。海明距離是編輯距離的一種特殊情況,只計算等長情況下替換操作的編輯次數(shù),只能應用于兩個等長字符串間的距離度量。
其他常用的度量方法還有 Jaccard distance、J-W距離(Jaro–Winkler distance)、余弦相似性(cosine similarity)、歐氏距離(Euclidean distance)等。
python-Levenshtein 使用
使用 pip install python-Levenshtein 指令安裝 Levenshtein
# -*- coding: utf-8 -*- import difflib # import jieba import Levenshtein str1 = "我的骨骼雪白 也長不出青稞" str2 = "雪的日子 我只想到雪中去si" # 1. difflib seq = difflib.SequenceMatcher(None, str1,str2) ratio = seq.ratio() print 'difflib similarity1: ', ratio # difflib 去掉列表中不需要比較的字符 seq = difflib.SequenceMatcher(lambda x: x in ' 我的雪', str1,str2) ratio = seq.ratio() print 'difflib similarity2: ', ratio # 2. hamming距離,str1和str2長度必須一致,描述兩個等長字串之間對應位置上不同字符的個數(shù) # sim = Levenshtein.hamming(str1, str2) # print 'hamming similarity: ', sim # 3. 編輯距離,描述由一個字串轉化成另一個字串最少的操作次數(shù),在其中的操作包括 插入、刪除、替換 sim = Levenshtein.distance(str1, str2) print 'Levenshtein similarity: ', sim # 4.計算萊文斯坦比 sim = Levenshtein.ratio(str1, str2) print 'Levenshtein.ratio similarity: ', sim # 5.計算jaro距離 sim = Levenshtein.jaro(str1, str2 ) print 'Levenshtein.jaro similarity: ', sim # 6. Jaro–Winkler距離 sim = Levenshtein.jaro_winkler(str1 , str2 ) print 'Levenshtein.jaro_winkler similarity: ', sim
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。