ForHosting KIT · Texto e IA

Distância Damerau–Levenshtein

form e from estão a 1 edição, porque trocar duas letras vizinhas conta como um só passo, enquanto kitten e sitting precisam de 3. Você também recebe uma similaridade de 0 a 1, útil para achar erros de digitação e nomes quase duplicados. Grátis no seu navegador.

  • Grátis
  • Funciona no seu navegador
  • Sem cadastro
  • Seus dados não saem do seu aparelho
Use pelo WebAPIE-mailTelegramApp em breve
Se você digitar
Texto a
kitten
Texto b
sitting
Você obtém
Distância
3
Len a
6
Len b
7
Comprimento máximo
7

A distância de Damerau–Levenshtein é uma métrica clássica de edição que conta quantas operações de um único caractere transformam uma cadeia em outra quando as operações permitidas são inserção, exclusão, substituição e transposição de dois caracteres adjacentes. Essa última operação é o que a separa da distância de Levenshtein simples e a torna especialmente útil para typos reais: as pessoas costumam trocar duas teclas vizinhas (form versus from, teh versus the) e isso deve custar um passo, não duas substituições. Esta capacidade implementa a forma Optimal String Alignment da distância com uma tabela pura de programação dinâmica, de modo que cada par de entradas produz o mesmo inteiro em qualquer runtime. Você envia dois textos e um indicador opcional de sensibilidade a maiúsculas; recebe a distância, ambos os comprimentos, uma similaridade normalizada entre zero e um, e um booleano identical.

O que Damerau–Levenshtein mede e como difere da Levenshtein simples

A distância de edição pergunta quantas mudanças unitárias são necessárias para reescrever uma cadeia de origem como uma cadeia de destino. A Levenshtein clássica permite três operações unitárias: inserir um caractere, excluir um caractere ou substituir um caractere por outro. Cada uma custa um.

A extensão de Damerau adiciona uma quarta operação: trocar dois caracteres adjacentes por um único custo unitário. Essa extensão corresponde a como as pessoas realmente digitam errado no teclado. Por exemplo, as cadeias ab e ba diferem por uma transposição adjacente sob Damerau–Levenshtein e por duas substituições sob Levenshtein simples.

Kitten versus sitting ainda custa três (como no exemplo de livro-texto de Levenshtein) porque o caminho mais barato usa substituições e uma inserção, não uma única troca. OSA é a forma que a maioria das bibliotecas rotula como Damerau–Levenshtein para correção de typos; proíbe aplicar duas transposições sobrepostas na mesma subcadeia, o que mantém a métrica simples e O(n·m) em tempo e espaço. Cadeias vazias são válidas: a distância da vazia a qualquer cadeia é o comprimento dessa cadeia, e a distância entre duas vazias é zero.

Cadeias idênticas sempre produzem distância zero e similaridade um, inclusive após o folding opcional de maiúsculas.

Onde essa distância faz diferença

Ferramentas de busca de produtos e inventário usam distância de edição com transposições para ranquear SKUs e marcas quase coincidentes antes de recorrer a modelos semânticos mais lentos. Pipelines de CRM e deduplicação marcam linhas candidatas a duplicata quando a distância é no máximo um ou dois e a similaridade fica acima de um limiar fixo, capturando letras trocadas que a igualdade simples ou mesmo a Levenshtein pura subestimariam.

Demos de corretor ortográfico e exercícios de sala precisam de um oráculo determinístico que marque form versus from como distância um e cobre uma taxa fixa transparente em vez de custo por tokens. Entrada inválida não consome saldo.

Combine a distância inteira com a sua própria política de limiar—aceite distância zero só para chaves exatas, distância um para correção agressiva de typos, similaridade acima de 0.8 para dicas de mescla suave—e você obtém um bloco auditável de correspondência difusa sem montar um motor de busca completo nem um stack de PLN próprio.

Correspondência de produtos e SKU tolerante a typos

Ranqueie candidatos do catálogo quando a string do comprador ou fornecedor estiver a uma troca ou uma edição do SKU verdadeiro, sem chamar um modelo de embeddings.

Deduplicação de CRM e registros

Sinalize nomes e endereços quase duplicados em que trocas de letras adjacentes são comuns, usando um limiar fixo de distância ou similaridade.

Lições de casa e demos de algoritmos

Mostre aos alunos o programa dinâmico OSA em kitten/sitting e ab/ba para que o custo de transposição fique visível ao lado da Levenshtein simples.

O que é a distância de Damerau–Levenshtein?

É o número mínimo de inserções, exclusões, substituições e transposições de caracteres adjacentes necessárias para transformar uma string em outra.

Como difere da distância de Levenshtein comum?

A Levenshtein simples não tem operação de transposição, então vizinhos trocados custam duas substituições. Damerau–Levenshtein (OSA) conta uma troca adjacente como uma edição, o que combina melhor com typos reais de teclado.

Strings vazias são permitidas?

Sim. A distância de vazia para não vazia é o comprimento dessa string; duas vazias têm distância zero e similaridade um.

O que significa a pontuação de similaridade?

É 1 menos a distância dividida pelo comprimento do texto mais longo. Kitten e sitting estão a 3 edições e a palavra maior tem 7 letras, então a similaridade fica em torno de 0,571428571429. Textos idênticos dão 1.

A ferramenta diferencia maiúsculas de minúsculas?

Sim, por padrão Kitten e kitten estão a uma edição. Se você desligar essa diferenciação, os dois textos viram minúsculas antes do cálculo e as diferenças de maiúsculas deixam de contar.

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.

POSThttps://api.kit.forhosting.com/str/damerau-levenshtein

Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.

curl -X POST https://api.kit.forhosting.com/str/damerau-levenshtein \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text_a":"kitten","text_b":"sitting"}'
{
  "text_a": "kitten",
  "text_b": "sitting"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "str.damerau_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.

por chamadaUS$ 0,002

Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.

HTTPCódigoO que significa
401unauthorizedToken ausente ou inválido. Confira o header Authorization.
402insufficient_balanceSaldo insuficiente para esta tarefa. Faça uma recarga e tente de novo.
404unknown_typeEsse tipo de tarefa não existe. Confira o campo type no catálogo.
429rate_limitedMuitas requisições em pouco tempo. Espere um instante e tente de novo.

O caminho gratuito do navegador e a API pré-paga compartilham o mesmo módulo, assim verificações de lição de casa, limiares de correspondência difusa e pipelines de produção nunca discordam sobre se dois rótulos estão próximos o bastante para mesclar.

O que Damerau–Levenshtein mede e como difere da Levenshtein simples

Este endpoint usa a recorrência Optimal String Alignment (OSA): uma matriz de programação dinâmica em que a célula (i, j) é o mínimo de excluir, inserir, substituir ou coincidir e—quando os dois últimos caracteres de cada prefixo formam um par cruzado—transpor a partir da célula (i−2, j−2).

Contrato de entrada, campos de resposta e regras de validação

Cada string é limitada a cinco mil caracteres para que a tabela quadrática permaneça limitada no caminho gratuito de borda. Uma string formula curta documenta a recorrência OSA para exibição ao lado da resposta. Validação falha não é cobrada. Mantenha entradas curtas o bastante para uso interativo, fixe a distância inteira e a similaridade arredondada nos testes, e você obtém pontuações difusas reproduzíveis sem modelo de linguagem nem dicionário externo. Envie um corpo JSON com dois campos de string obrigatórios: text_a (aliases a, string1, s1, left, first, source) e text_b (aliases b, string2, s2, right, second, target). Ambos podem estar vazios; valores ausentes ou que não sejam string falham com invalid_input nomeando o campo. O opcional case_sensitive tem padrão true para que Kitten e kitten possam diferir; defina-o como false para converter ambos os lados em minúsculas antes de preencher a tabela. Em sucesso o corpo ecoa text_a, text_b e case_sensitive; informa distance como inteiro não negativo; informa len_a, len_b e max_len das strings normalizadas; informa similarity como (max_len − distance) / max_len arredondado a doze decimais (ou um quando ambos os comprimentos são zero); e define identical como true exatamente quando distance é zero. Exemplo: text_a kitten e text_b sitting produzem distance três, comprimentos seis e sete, max_len sete, similarity cerca de 0.571 e identical false. Exemplo: text_a ab e text_b ba produzem distance um por causa da troca adjacente.

Onde uma API Damerau–Levenshtein justifica o investimento

Como a implementação é parse pura de nível A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002 sem tokens de modelo e sem rede de saída.

A comparação diferencia maiúsculas de minúsculas?

Por padrão sim (case_sensitive true). Defina case_sensitive como false para converter ambas as strings em minúsculas antes de calcular a distância, para que Kitten e kitten coincidam.

Quanto custa a calculadora Damerau–Levenshtein?

A ferramenta do navegador é gratuita. Pedidos API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.

Ver a documentação completa do KIT →