Distância de Levenshtein

De Augusto Baffa Wiki
Ir para navegação Ir para pesquisar

A distância de Levenshtein é uma métrica de string para medir a diferença entre duas sequências. Normalmente, a distância Levenshtein entre duas palavras é o número mínimo de edições de um caractere (inserção, exclusão, substituição) necessárias para transformar uma palavra na outra.

Definição

def levenshtein(str1, str2):
    m = len(str1)
    n = len(str2)
    lensum = float(m + n)
    d = []           
    for i in range(m+1):
        d.append([i])        
    del d[0][0]    
    for j in range(n+1):
        d[0].append(j)       
    for j in range(1,n+1):
        for i in range(1,m+1):
            if str1[i-1] == str2[j-1]:
                d[i].insert(j,d[i-1][j-1])           
            else:
                minimum = min(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+2)         
                d[i].insert(j, minimum)
    ldist = d[-1][-1]
    ratio = (lensum - ldist)/lensum
    return ratio, ldist

Encontrar uma palavra em uma string:

def levenshteinPartial(str1, str2):

    if len(str2) < len(str1):
        a = str1
        str1 = str2
        str2 = a
    
    diff = len(str2) - len(str1)
    if diff == 0:
        return levenshtein(str1, str2)

    ret = None
    for i in range(0,diff+1):
        v = levenshtein(str1, str2[i:len(str1)+i])
        if ret == None:
            ret = v
        elif v[0] > ret[0]: 
            ret = v
    return ret

Ver também