Calcular distância de edição de Levenshtein
A distância de edição de Levenshtein mostra quantas alterações de um caractere são necessárias para transformar uma string em outra.
Executar grátis
Informe duas strings para obter o número mínimo de inserções, exclusões e substituições. Essa medida é útil quando exigir igualdade exata seria rígido demais, mas você ainda precisa de uma diferença clara e reproduzível. A comparação diferencia maiúsculas, é determinística e trabalha diretamente com pontos de código Unicode, sem rede ou pontuação probabilística.
O que a distância representa
A distância de Levenshtein é um inteiro não negativo. Zero indica strings idênticas; um significa que uma inserção, exclusão ou substituição basta para igualá-las. Valores maiores exigem mais edições. O algoritmo considera todas as sequências válidas e devolve o menor total, em vez de alterar o texto avidamente da esquerda para a direita. Isso faz diferença com caracteres repetidos ou trechos deslocados. O resultado diferencia maiúsculas e minúsculas e é uma contagem absoluta, não uma porcentagem. Uma distância três pode ser grande para um código de quatro caracteres e pequena para um parágrafo. Avalie o inteiro junto com o comprimento das strings e a tolerância adequada à sua aplicação.
Como o cálculo é feito
A calculadora usa programação dinâmica para encontrar a forma mais barata de transformar cada prefixo da primeira string em cada prefixo da segunda. Em cada posição, considera inserir, excluir ou substituir um caractere; caracteres iguais não acrescentam custo. A implementação mantém somente a linha anterior e a atual, preservando o resultado exato com memória proporcional à entrada menor. Os caracteres são lidos como pontos de código Unicode, portanto um caractere suplementar representado por um par substituto em JavaScript conta como um elemento. Não há normalização Unicode nem conversão de caixa. Se representações visualmente iguais precisarem ser equivalentes, normalize ou padronize os textos antes do envio.
Como usar o resultado
Envie os valores nos campos <code>first</code> e <code>second</code>. Ambos precisam ser strings, embora uma string vazia seja válida; nesse caso, a distância é o número de pontos de código Unicode da outra. A resposta contém o inteiro <code>distance</code>. Você pode comparar um nome informado com um nome conhecido ou verificar se um identificador corrigido está a uma edição do original. Não use um único limite para tudo: códigos curtos, nomes e frases têm perfis de erro diferentes. Decida antes se espaços, pontuação, acentos e caixa devem importar. O navegador atende verificações interativas, enquanto a API usa a mesma implementação determinística por US$ 0,002 por solicitação. Valores que não sejam strings são rejeitados sem conversão silenciosa.
Casos de uso
Detectar prováveis erros de digitação
Meça quantas edições separam uma palavra ou um nome informado do valor esperado antes de aplicar um limite específico.
Comparar identificadores de registros
Sinalize para revisão identificadores diferentes por apenas uma ou duas inserções, exclusões ou substituições.
Avaliar correções de texto
Quantifique a alteração caractere a caractere entre a versão original e a corrigida com um inteiro reproduzível.
Perguntas frequentes
Quais operações entram na distância?
Cada inserção, exclusão ou substituição de um caractere custa um. O menor total possível é devolvido.
A comparação diferencia maiúsculas?
Sim. Converta os textos para a mesma caixa antes do envio caso queira ignorar essa diferença.
Uma das strings pode estar vazia?
Sim. A distância de uma string vazia é o número de pontos de código Unicode da outra.
A calculadora normaliza texto Unicode?
Não. Ela compara os pontos de código recebidos; normalize formas combinadas antes se elas precisarem ser equivalentes.
Ela devolve uma porcentagem de similaridade?
Não. Ela devolve a contagem mínima absoluta de edições. Você pode normalizá-la com um denominador adequado.
Quanto custa uma solicitação API?
Cada solicitação API custa US$ 0,002. A capacidade também pode ser executada no navegador para uso interativo.
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/text/text-similarity-levenshtein \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first":"kitten","second":"sitting"}'const res = await fetch("https://api.kit.forhosting.com/text/text-similarity-levenshtein", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first": "kitten",
"second": "sitting"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/text-similarity-levenshtein",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first": "kitten",
"second": "sitting"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/text-similarity-levenshtein", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first":"kitten","second":"sitting"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first":"kitten","second":"sitting"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/text-similarity-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
{
"first": "kitten",
"second": "sitting"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_similarity_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_tokens | 20000 |
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. |