python-Levenshtein包的一些用法總結


#! /usr/bin/python
# -*- coding: utf8 -*-
# @Time    : 2018/8/30 10:11
# @Author  : yukang
 
from Levenshtein import *
 
# 個人總結的 關於 Levenshtein 所有函數的用法 和 注釋
apply_edit()  #根據第一個參數editops()給出的操作權重,對第一個字符串基於第二個字符串進行相對於權重的操作
 
distance() #計算2個字符串之間需要操作的絕對距離
 
editops() #找到將一個字符串轉換成另外一個字符串的所有編輯操作序列
 
hamming() #計算2個字符串不同字符的個數,這2個字符串長度必須相同
 
inverse() #用於反轉所有的編輯操作序列
 
jaro() #計算2個字符串的相識度,這個給與相同的字符更高的權重指數
 
jaro_winkler() #計算2個字符串的相識度,相對於jaro 他給相識的字符串添加了更高的權重指數,所以得出的結果會相對jaro更大(%百分比比更大)
 
matching_blocks() #找到他們不同的塊和相同的塊,從第六個開始相同,那么返回截止5-5不相同的1,第8個后面也開始相同所以返回8-8-1,相同后面進行對比不同,最后2個對比相同返回0
 
median() #找到一個列表中所有字符串中相同的元素,並且將這些元素整合,找到最接近這些元素的值,可以不是字符串中的值。
 
median_improve() #通過擾動來改進近似的廣義中值字符串。
 
opcodes() #給出所有第一個字符串轉換成第二個字符串需要權重的操作和操作詳情會給出一個列表,列表的值為元祖,每個元祖中有5個值
    #[('delete', 0, 1, 0, 0), ('equal', 1, 3, 0, 2), ('insert', 3, 3, 2, 3), ('replace', 3, 4, 3, 4)]
    #第一個值是需要修改的權重,例如第一個元祖是要刪除的操作,2和3是第一個字符串需要改變的切片起始位和結束位,例如第一個元祖是刪除第一字符串的0-1這個下標的元素
    #4和5是第二個字符串需要改變的切片起始位和結束位,例如第一個元祖是刪除第一字符串的0-0這個下標的元素,所以第二個不需要刪除
 
quickmedian() #最快的速度找到最相近元素出現最多從新匹配出的一個新的字符串
 
ratio() #計算2個字符串的相似度,它是基於最小編輯距離
 
seqratio() #計算兩個字符串序列的相似率。
 
setmedian() #找到一個字符串集的中位數(作為序列傳遞)。 取最接近的一個字符串進行傳遞,這個字符串必須是最接近所有字符串,並且返回的字符串始終是序列中的字符串之一。
 
setratio() #計算兩個字符串集的相似率(作為序列傳遞)。
 
subtract_edit() #從序列中減去一個編輯子序列。看例子這個比較主要的還是可以將第一個源字符串進行改變,並且是基於第二個字符串的改變,最終目的是改變成和第二個字符串更相似甚至一樣
 
 
 
# print(hamming('Hello world!', 'Holly world!'))
# print(jaro_winkler("yukangrtyu",'yukangrtyn'))
# fixme = ['Levnhtein', 'Leveshein', 'Leenshten', 'Leveshtei', 'Lenshtein', 'Lvenstein', 'Levenhtin', 'evenshtei']
# print(opcodes('spam', 'park'))
# print(ratio('spam', 'spark'))
# print(jaro_winkler('spam', 'spark'))
# print(jaro('spam', 'spark'))
# print(seqratio('spam', 'spark'))
# print(seqratio(['newspaper', 'litter bin', 'tinny', 'antelope'],['caribou', 'sausage', 'gorn', 'woody']))
# print(setratio(['newspaper', 'litter bin', 'tinny', 'antelope'],['caribou', 'sausage', 'gorn', 'woody']))
# e = editops('man', 'scotsman')
# e1 = e[:3]
# bastard = apply_edit(e1, 'man', 'scotsman')
# print(e)
# print(e1)
# print(bastard)
# print(subtract_edit(e, e1))
# print(apply_edit(subtract_edit(e, e1), bastard, 'scotsman'))
 
def acquaintance(a,b):
    for i in a:
        item = {}
        for j in b:
            if ratio(u"%s"%i,u"%s"%j):
                item[ratio(u"%s"%i,u"%s"%j)] = (i,j)
        d = item[max(list(item.keys()))]
        c = '"%s"和"%s"-最相似---匹配度為:%f'%(d[0],d[1],max(list(item.keys())))
        print(c)
 
a = ["你好",'hello,world','計算偏差大不大啊?','文本可以嗎','請看這里']
b = ['helloworld',"你好嗎?",'可以嗎','請這里','計算偏差大不大']
acquaintance(a,b)
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM