Calculadora de distância de edição Levenshtein
A calculadora de distância de edição Levenshtein mede a diferença entre duas strings pelo menor número de inserções, exclusões e substituições de um caractere necessário para transformar a primeira na segunda.
Executar grátis
Informe uma string de origem e outra de destino para receber a distância e o tamanho de ambas. O cálculo é determinístico, diferencia maiúsculas, espaços e caracteres Unicode e ajuda você a validar algoritmos, comparar entradas e criar processos reproduzíveis de correspondência textual.
O que a distância Levenshtein mede
A distância Levenshtein resume a comparação entre duas strings em um número inteiro. Zero significa que elas são idênticas; um indica que basta inserir, excluir ou substituir um caractere. Valores maiores representam a sequência mínima dessas operações. Por exemplo, transformar <code>kitten</code> em <code>sitting</code> exige 3 edições: 2 substituições e 1 inserção. A métrica considera posição e ordem e é simétrica, portanto inverter origem e destino mantém o resultado. Ela fornece uma contagem absoluta, não uma porcentagem de similaridade. Assim, distância 3 pode ser relevante para um código curto e pequena para um parágrafo. Os comprimentos retornados ajudam você a interpretar o valor no contexto correto.
Como o texto é calculado
As strings são comparadas exatamente como recebidas. Letras maiúsculas e minúsculas diferem, espaços e pontuação contam e nenhuma normalização Unicode é aplicada. Isso evita que uma limpeza invisível altere a comparação. Os caracteres são lidos como pontos de código Unicode; por isso, um emoji comum conta como um caractere, e não como duas metades UTF-16. Símbolos visuais combinados ainda podem usar vários pontos. Se a sua aplicação precisa igualar formas visuais, normalize ambas as entradas segundo uma política explícita. O algoritmo usa programação dinâmica e mantém somente duas linhas, reduzindo a memória ao tamanho da string menor. Cada entrada aceita até 5,000 pontos de código para limitar o processamento quadrático.
Como aplicar o resultado
A distância de edição pode ordenar correspondências aproximadas, sinalizar erros de digitação e testar transformações. Uma busca pode usá-la como um dos sinais para sugerir correções; um processo de dados pode encaminhar nomes parecidos para revisão; e testes podem impor um limite exato de edições. Evite um único corte universal. Distância 2 pode indicar um erro provável em um nome longo, mas outro identificador em uma string curta. Considere também comprimento, idioma e risco de falso positivo. Todas as operações recebem o mesmo custo: a métrica não conhece teclas vizinhas nem considera a troca de caracteres adjacentes como uma única edição. Use o número como referência transparente e combine-o com regras do seu domínio quando a decisão for importante.
Casos de uso
Verificar sugestões ortográficas
Ordene correções candidatas pelo número mínimo de edições entre a consulta digitada e cada termo conhecido.
Encontrar registros quase duplicados
Compare nomes, rótulos ou referências e envie correspondências próximas para revisão antes de mesclar.
Testar transformações de texto
Valide uma distância exata entre a entrada original e a saída em testes automatizados determinísticos.
Perguntas frequentes
Quais operações valem uma edição?
Inserir, excluir ou substituir um caractere conta como uma edição.
A comparação diferencia maiúsculas?
Sim. Converta ambas as entradas para o mesmo formato se quiser ignorar maiúsculas e minúsculas.
Os espaços alteram a distância?
Sim. Espaços, tabulações e quebras de linha são preservados e comparados exatamente.
Como emoji e Unicode são contados?
O cálculo usa pontos de código Unicode, embora um símbolo visual combinado possa conter vários pontos.
É a distância Damerau-Levenshtein?
Não. Trocar dois caracteres adjacentes não é uma operação única neste cálculo padrão.
Quanto custa uma solicitação API?
Cada solicitação API custa US$ 0,002. A versão no navegador é executada localmente sem solicitação paga.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"source": "kitten",
"target": "sitting"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.levenshtein",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_chars | 5000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |