Calcolatore della distanza di Levenshtein
Dati di input
| Prima stringa | kitten |
|---|---|
| Seconda stringa | sitting |
Calcolatore della distanza di Levenshtein
Calcola la distanza di Levenshtein (distanza di edit) tra due stringhe: il numero minimo di inserimenti, eliminazioni e sostituzioni di singoli caratteri necessari per trasformare l’una nell’altra, insieme a una percentuale di somiglianza.
Dati di input
Stringhe
Risultati
Inserisci un valore per visualizzare i risultati.
Risultati
Distanza di Levenshtein
La distanza di Levenshtein, detta anche distanza di edit, misura quanto due stringhe siano diverse contando il numero minimo di modifiche di un singolo carattere necessarie per trasformare l’una nell’altra. Le modifiche consentite sono l’inserimento, l’eliminazione e la sostituzione, ciascuna con costo uno. Il calcolatore riceve due stringhe e restituisce questa distanza insieme a una percentuale di somiglianza, utile per il controllo ortografico, la corrispondenza approssimata e il confronto di sequenze come il DNA.
Le tre operazioni di modifica
Ogni trasformazione tra due stringhe può essere espressa come una sequenza di tre mosse di base. Un inserimento aggiunge un carattere, un’eliminazione ne toglie uno e una sostituzione rimpiazza un carattere con un altro. La distanza di Levenshtein cerca la sequenza più economica di queste mosse, dove ognuna costa uno. Poiché la sostituzione è un singolo passo e non un’eliminazione seguita da un inserimento, cambiare una lettera conta sempre come una modifica, non due.
Prende il nome da Vladimir Levenshtein, che la definì nel 1965, e generalizza la più antica Calcolatore della distanza di Hamming: la distanza di Hamming consente solo sostituzioni e soltanto per stringhe di uguale lunghezza, mentre quella di Levenshtein ammette anche inserimenti ed eliminazioni, perciò gestisce stringhe di lunghezze diverse.
La tabella di programmazione dinamica
La distanza si calcola riempiendo una tabella con una riga per ciascun carattere della prima stringa (più una riga vuota iniziale) e una colonna per ciascun carattere della seconda (più una colonna vuota iniziale). La cella contiene la distanza di edit tra i primi caratteri di A e i primi caratteri di B.
La prima riga e la prima colonna contano le modifiche rispetto alla stringa vuota, quindi e . Ogni altra cella è il minimo di tre candidati:
D[i][j]=min⎩⎨⎧D[i−1][j]+1D[i][j−1]+1D[i−1][j−1]+c(eliminazione)(inserimento)(sostituzione)dove il costo di sostituzione è 0 quando i caratteri coincidono e 1 quando differiscono. La risposta si trova nella cella in basso a destra. Riempire la tabella richiede un tempo proporzionale al prodotto delle due lunghezze, .
Esempio svolto
Prendiamo la coppia classica «kitten» e «sitting». Seguendo il percorso ottimale nella tabella si ottengono tre modifiche:
kittensittensittin→sitten→sittin→sitting(sostituire k→s)(sostituire e→i)(inserire g)Non esiste alcuna sequenza più breve, quindi la distanza è 3. La stringa più lunga ha 7 caratteri, perciò la somiglianza è , cioè circa il 57%.
La somiglianza e i suoi limiti
Il calcolatore normalizza la distanza grezza in un punteggio di somiglianza tramite
Dividere per la lunghezza della stringa più lunga mantiene il risultato tra lo 0% per stringhe del tutto diverse e il 100% per stringhe identiche; due stringhe vuote sono considerate identiche. Questa è una delle normalizzazioni più comuni — altri strumenti dividono per la somma delle lunghezze o usano misure basate su rapporti — quindi i valori di somiglianza provenienti da fonti diverse non sono direttamente confrontabili.
Dove viene usata
I correttori ortografici ordinano le correzioni candidate in base alla distanza di edit dalla parola scritta male. I sistemi di ricerca e di basi di dati la usano per la corrispondenza approssimata, tollerando i refusi nella consultazione di nomi o indirizzi. In bioinformatica, la distanza di edit è alla base dell’allineamento di sequenze per confrontare DNA, RNA e proteine, dove inserimenti ed eliminazioni corrispondono a mutazioni. Il modello di costo di Levenshtein semplice tratta tutte le modifiche allo stesso modo; le applicazioni che richiedono penalità diverse per operazioni diverse, o che devono allineare in modo efficiente sequenze molto lunghe, lo estendono con costi pesati o con algoritmi di allineamento specializzati.
Domande frequenti (FAQ)
Che cos’è la distanza di Levenshtein?
La distanza di Levenshtein, detta anche distanza di edit, è il numero minimo di modifiche di un singolo carattere — inserimenti, eliminazioni o sostituzioni — necessarie per trasformare una stringa in un’altra. È stata introdotta nel 1965 dal matematico sovietico Vladimir Levenshtein.
Ad esempio, la distanza tra «kitten» e «sitting» è 3: sostituire k→s, sostituire e→i e inserire una g alla fine. Non esiste alcuna sequenza di modifiche più breve.
Il valore si calcola con una tabella di programmazione dinamica le cui celle contengono la distanza di edit tra i prefissi delle due stringhe. Riempire la tabella richiede un tempo proporzionale al prodotto delle due lunghezze.
In che cosa differisce dalla distanza di Hamming?
La distanza di Hamming conta solo le sostituzioni ed è definita unicamente per stringhe di uguale lunghezza, poiché confronta i caratteri posizione per posizione. La distanza di Levenshtein consente anche inserimenti ed eliminazioni, perciò funziona con stringhe di lunghezza diversa e coglie gli spostamenti di allineamento.
Per due stringhe della stessa lunghezza, la distanza di Levenshtein è sempre minore o uguale a quella di Hamming, perché la sostituzione è una delle sue operazioni, ma può individuare un percorso più conveniente tramite inserimenti ed eliminazioni.
Come si calcola la percentuale di somiglianza?
La somiglianza è espressa come 1 − distanza / max(len_a, len_b), in forma di percentuale. Dividere per la lunghezza della stringa più lunga normalizza il punteggio nell’intervallo da 0% (completamente diverse) a 100% (identiche). Quando entrambe le stringhe sono vuote, la somiglianza è definita pari al 100%.
Questa è una delle normalizzazioni più comuni; altri strumenti dividono per la somma delle lunghezze o usano misure basate su rapporti, quindi i punteggi di somiglianza non sono direttamente confrontabili tra definizioni diverse.