Calcolatore Distanza di Levenshtein

Calcola la distanza di Levenshtein (edit distance) tra stringhe, similarità percentuale, Damerau con trasposizione e ricerca parola più vicina in lista.

Parametri di calcolo
Scegli il tipo di calcolo.
Prima stringa da confrontare.
Seconda stringa. Per 'closest_word' è la parola di riferimento.
Per modo closest_word: dizionario in cui cercare la parola più vicina a s1.
Questo calcolatore ti è stato utile?

La distanza di Levenshtein

La distanza di Levenshtein, introdotta dal matematico russo Vladimir Levenshtein nel 1965, è una metrica di modifica tra due stringhe: conta il numero minimo di operazioni elementari di inserzione, cancellazione o sostituzione di singoli caratteri necessarie per trasformare una stringa nell'altra. È una delle metriche di similarità tra testi più usate al mondo, fondamentale per:

  • Correzione ortografica: quando digiti «kitten» e il correttore propone «kitchen» perché hanno distanza 3.
  • Autocomplete e ricerca fuzzy: Google, Bing, motori di ricerca interni.
  • Bioinformatica: allineamento di sequenze DNA o proteiche.
  • Record linkage: unione di dati da fonti diverse con nomi e indirizzi scritti in modi lievemente diversi.
  • Traduzione automatica: valutazione dell'output (TER — Translation Edit Rate).

Le tre operazioni elementari

Le operazioni permesse da Levenshtein, ciascuna con costo 1:

  1. Inserzione: aggiungi un carattere. Esempio: «kiten» → «kitten» (inserisce 't').
  2. Cancellazione: rimuovi un carattere. Esempio: «kittten» → «kitten» (cancella 't').
  3. Sostituzione: cambia un carattere con un altro. Esempio: «kiiten» → «kitten» (sostituisce 'i' con 't').

La distanza tra «kitten» e «sitting» è 3: k→s (sostituzione), e→i (sostituzione), inserisci «g» alla fine. Nessuna sequenza di operazioni richiede meno passaggi.

Le quattro modalità del calcolatore

  1. Distanza classica: calcola la distanza e mostra la matrice DP (programmazione dinamica) con cui è stata ottenuta, oltre alla sequenza ottimale di operazioni.
  2. Similarità normalizzata: converte la distanza in percentuale (0-100%) usando sim = 1 − d/max(|s1|, |s2|). Valori > 80% indicano similarità alta (fuzzy match).
  3. Damerau-Levenshtein: variante che aggiunge una quarta operazione, la trasposizione di due caratteri adiacenti (costo 1). Cattura errori di battitura come «teh» invece di «the» con costo 1 invece di 2.
  4. Parola più vicina: dato un vocabolario di parole, trova quella a distanza minima da una parola target. È il cuore degli algoritmi di correzione ortografica.

L'algoritmo di programmazione dinamica

L'approccio classico, proposto da Levenshtein stesso e perfezionato da Wagner-Fischer (1974), usa programmazione dinamica: costruisce una matrice d[i][j] di dimensione (|s1|+1) × (|s2|+1), dove d[i][j] è la distanza tra i primi i caratteri di s1 e i primi j caratteri di s2. La ricorrenza è:

d[i][j] = min(d[i−1][j] + 1, d[i][j−1] + 1, d[i−1][j−1] + c)

dove c = 0 se s1[i−1] = s2[j−1], altrimenti c = 1. I tre termini rappresentano rispettivamente cancellazione, inserzione e sostituzione. La base della ricorsione è d[i][0] = i e d[0][j] = j (servono i cancellazioni o j inserzioni per svuotare o riempire una stringa). La complessità è O(|s1|·|s2|) in tempo e memoria.

Damerau-Levenshtein

Frederick Damerau (1964) osservò che l'80% degli errori di battitura umani cadono in quattro categorie: inserimento, cancellazione, sostituzione e trasposizione (scambio di due caratteri adiacenti). La distanza di Damerau-Levenshtein aggiunge quindi una quarta operazione con costo 1:

d[i][j] ≤ d[i−2][j−2] + 1 se s1[i−1] = s2[j−2] e s1[i−2] = s2[j−1]

Con Damerau, «teh» → «the» ha distanza 1 (una trasposizione); con Levenshtein classico è 2 (sostituzione e→h, sostituzione h→e). La variante di Damerau produce risultati più allineati all'intuizione umana dell'errore di battitura.

Varianti e alternative

  • Distanza di Hamming: conta le posizioni in cui due stringhe di lunghezza uguale differiscono. Più semplice ma restrittiva (solo sostituzioni).
  • Distanza di Jaro / Jaro-Winkler: enfatizza prefissi comuni, utile per confrontare nomi propri.
  • N-gram / Jaccard: basate su sottoinsiemi di k caratteri consecutivi. Efficaci per stringhe lunghe.
  • Needleman-Wunsch: generalizzazione con pesi diversi per ogni operazione. Standard in bioinformatica.
  • Smith-Waterman: variante locale di Needleman-Wunsch per allineamenti parziali.

Applicazioni pratiche

  • Spell-checker: Aspell, Hunspell, Google Search suggeriscono correzioni minimizzando la distanza da un vocabolario.
  • Fuzzy search: Elasticsearch, Solr implementano ricerca approssimata con soglia di distanza max.
  • Diff/merge: il comando diff di Unix e Git usano varianti ottimizzate (algoritmo di Myers 1986).
  • DNA: BLAST e FASTA allineano sequenze biologiche con varianti pesate di Levenshtein.
  • Deduplicazione: in database con dati disordinati (importazioni CSV), si uniscono record con distanza di Levenshtein < soglia.
  • OCR: correzione di errori di riconoscimento caratteri basata sul dizionario della lingua.

Ottimizzazioni avanzate

Per applicazioni di produzione, l'algoritmo di Levenshtein può essere ottimizzato:

  • Memoria O(min(m, n)): poiché il calcolo di una riga richiede solo la precedente, serve solo 2 array 1D.
  • Ukkonen's cutoff: se sappiamo che cerchiamo distanza ≤ k, possiamo limitare il calcolo a una «banda» di larghezza 2k+1 attorno alla diagonale, riducendo la complessità a O(k·max(m, n)).
  • Bit-parallel (Myers 1999): usando SIMD e operazioni bitwise, si ottiene O(⌈n/w⌉·m) con w = 64 bit di parola macchina — circa 60× più veloce per stringhe fino a 64 caratteri.
  • Heuristic pruning: approximate filtering di candidati con q-gram o tabelle hash prima di calcolare Levenshtein esatto.

Aggiornato a luglio 2026

Domande frequenti

Cos'e la distanza di Levenshtein?

E il numero minimo di operazioni elementari (inserimento, cancellazione o sostituzione di un carattere) necessarie per trasformare una stringa in un'altra. Introdotta dal matematico russo Vladimir Levenshtein nel 1965, e la misura piu usata per quantificare quanto due parole o testi differiscono. Per "kitten" e "sitting" vale 3.

Quali modalita offre il calcolatore?

Quattro: la distanza classica con la matrice di programmazione dinamica, la similarita normalizzata da 0 a 100%, la variante Damerau-Levenshtein che aggiunge la trasposizione di caratteri adiacenti, e la ricerca della parola piu vicina in un elenco. Ogni modalita mostra la sequenza di operazioni ottimale.

Come si calcola la distanza?

Con la programmazione dinamica: si costruisce una matrice in cui d[i][j] e la distanza fra i primi i caratteri della prima stringa e i primi j della seconda. Ogni cella si ottiene dal minimo fra d[i-1][j]+1, d[i][j-1]+1 e d[i-1][j-1]+costo, dove il costo e 0 se i caratteri coincidono, 1 altrimenti.

Cos'e la similarita normalizzata?

E la distanza espressa in percentuale rispetto alla lunghezza massima delle due stringhe: similarita = (1 - distanza/max(|s1|, |s2|)) x 100%. Vale 100% per stringhe identiche e scende verso 0 per stringhe molto diverse. Nel fuzzy matching si usa spesso una soglia dell'80% per considerare due stringhe simili.

Cos'e la distanza di Damerau-Levenshtein?

E una variante che aggiunge una quarta operazione: la trasposizione di due caratteri adiacenti, con costo 1. Cattura meglio i refusi di battitura come lo scambio di lettere vicine ("teh" invece di "the"). Il calcolatore mostra sia la distanza di Levenshtein sia quella di Damerau per confronto.

Qual e la complessita dell'algoritmo?

Il calcolo con la matrice richiede tempo e spazio proporzionali al prodotto delle lunghezze delle due stringhe, cioe O(m x n). Esistono ottimizzazioni: la versione a banda diagonale per distanze piccole, l'algoritmo bit-parallel di Myers e il filtraggio q-gram, che accelerano notevolmente i confronti su grandi dizionari.

Dove si usa la distanza di Levenshtein?

Nei correttori ortografici e nell'autocorrezione, nella ricerca fuzzy, nel riconoscimento ottico dei caratteri, nella bioinformatica per allineare sequenze di DNA e proteine, nel rilevamento del plagio, nella deduplicazione di database e negli strumenti di confronto tra file. E ovunque serva misurare la somiglianza fra testi.

Come si trova la parola piu simile?

Si calcola la distanza di Levenshtein fra la stringa data e ogni parola di un elenco candidato, scegliendo quella con distanza minima. E il meccanismo dei suggerimenti dei correttori e dell'autocompletamento: fra tutte le parole del dizionario, si propone quella che richiede meno modifiche per corrispondere a quanto digitato.

Formula

d[i][j] = min(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+c), c = 0 se s1[i-1]=s2[j-1] else 1. Damerau + transposizione adiacente.

Commenti (0)

Ancora nessun commento. Sii il primo!