Calcolatore della distanza di Levenshtein
Questo calcolatore misura la differenza fra due stringhe trovando il numero minimo di inserimenti, eliminazioni e sostituzioni di un carattere necessario per trasformare la prima nella seconda.
Esegui gratis nel browser
Inserisca una stringa sorgente e una destinazione per ricevere la distanza e le rispettive lunghezze. Il calcolo è deterministico, distingue maiuscole, spazi e caratteri Unicode ed è adatto per convalidare algoritmi, confrontare dati inseriti e creare procedure riproducibili di corrispondenza testuale.
Che cosa misura la distanza di Levenshtein
La distanza di Levenshtein esprime il confronto con un intero. Zero indica stringhe identiche; uno significa che basta un inserimento, un’eliminazione o una sostituzione. Valori maggiori rappresentano la sequenza minima di tali operazioni. Per esempio, da <code>kitten</code> a <code>sitting</code> servono 3 modifiche: 2 sostituzioni e 1 inserimento. La metrica considera ordine e posizione ed è simmetrica, quindi invertire sorgente e destinazione non cambia il risultato. È un conteggio assoluto, non una percentuale. Una distanza di 3 può essere elevata per un codice breve e modesta per un paragrafo. Le lunghezze restituite Le consentono di valutare correttamente questo contesto.
Come vengono trattati i caratteri
Le stringhe sono confrontate esattamente come fornite. Maiuscole, minuscole, spazi e punteggiatura sono significativi e non viene eseguita alcuna normalizzazione Unicode. I caratteri sono letti come punti di codice Unicode, perciò un emoji comune conta come uno anziché come due metà UTF-16. Un simbolo visivo composto può comunque includere più punti. Se occorre equiparare forme visivamente equivalenti, normalizzi entrambe le stringhe secondo una regola esplicita. L’algoritmo usa la programmazione dinamica ma conserva soltanto due righe, limitando la memoria alla stringa più corta. Ogni input è limitato a 5,000 punti di codice per contenere il lavoro quadratico.
Come interpretare il risultato
La distanza è utile per ordinare corrispondenze approssimative, segnalare refusi e verificare trasformazioni. Un motore di ricerca può usarla fra i segnali per suggerire correzioni; una pipeline può inviare nomi simili alla revisione; un test può imporre un numero massimo di modifiche. Non adotti una soglia universale. Una distanza di 2 può indicare un refuso in un nome lungo ma un identificatore diverso in una stringa breve. Consideri lunghezza, lingua e rischio di falsi abbinamenti. Ogni operazione ha lo stesso costo: la metrica non conosce la vicinanza dei tasti e non tratta lo scambio di caratteri adiacenti come una sola modifica. La usi come base trasparente, integrandola con regole specifiche del Suo dominio.
Casi d'uso
Verificare suggerimenti ortografici
Ordini le correzioni candidate in base alle modifiche minime fra la query e i termini noti.
Individuare record quasi duplicati
Confronti nomi, etichette o riferimenti e sottoponga le corrispondenze vicine a revisione.
Testare trasformazioni testuali
Verifichi una distanza esatta fra valore originale e risultato nei test deterministici.
Domande frequenti
Quali operazioni contano come modifica?
Inserire, eliminare o sostituire un carattere vale una modifica.
Il confronto distingue le maiuscole?
Sì. Uniformi prima entrambe le stringhe se desidera ignorare la differenza.
Gli spazi incidono sulla distanza?
Sì. Spazi, tabulazioni e ritorni a capo vengono conservati e confrontati.
Come sono contati Unicode ed emoji?
Il calcolo usa punti di codice Unicode, ma un simbolo composto può contenerne più di uno.
È la distanza Damerau-Levenshtein?
No. Lo scambio di due caratteri adiacenti non vale una singola operazione.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. La versione browser viene eseguita localmente senza richiesta a pagamento.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/levenshtein \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"source":"kitten","target":"sitting"}'const res = await fetch("https://api.kit.forhosting.com/dev/levenshtein", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"source": "kitten",
"target": "sitting"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/levenshtein",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"source": "kitten",
"target": "sitting"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/levenshtein", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"source":"kitten","target":"sitting"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"source":"kitten","target":"sitting"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/levenshtein", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"source": "kitten",
"target": "sitting"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.levenshtein",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_chars | 5000 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |