Calculadora de distancia de edición Levenshtein
La calculadora de distancia de edición Levenshtein mide cuánto difieren dos cadenas mediante el número mínimo de inserciones, eliminaciones y sustituciones de un carácter necesarias para convertir la primera en la segunda.
Ejecutar — gratis
Introduzca una cadena de origen y otra de destino para obtener la distancia y la longitud de ambas. El cálculo es determinista, distingue mayúsculas, espacios y caracteres Unicode, por lo que resulta útil para validar algoritmos, comparar entradas y crear flujos de coincidencia de texto reproducibles.
Qué mide la distancia Levenshtein
La distancia Levenshtein convierte la comparación de dos cadenas en un entero claro. Cero significa que son idénticas; uno indica que basta una inserción, eliminación o sustitución. Los valores mayores describen la secuencia mínima de esas operaciones. Por ejemplo, convertir <code>kitten</code> en <code>sitting</code> requiere 3 cambios: 2 sustituciones y 1 inserción. La métrica considera la posición y el orden, y es simétrica: intercambiar origen y destino no cambia el resultado. Se trata de un número absoluto, no de un porcentaje de similitud. Por ello, una distancia de 3 puede ser grande para un código corto y pequeña para un párrafo. La calculadora devuelve también las longitudes para que usted interprete el resultado con su contexto.
Cómo se procesa el texto
La comparación usa exactamente las cadenas recibidas. Mayúsculas y minúsculas son distintas; los espacios y signos cuentan; no se aplica normalización Unicode. Así no hay una limpieza oculta que cambie la pregunta. Los caracteres se leen como puntos de código Unicode, de modo que un emoji común cuenta como uno y no como dos mitades UTF-16. Algunos símbolos visuales combinados todavía constan de varios puntos. Si necesita equiparar variantes visuales, normalice ambas entradas según su propia política. El algoritmo aplica programación dinámica y conserva solo dos filas, con memoria proporcional a la cadena más corta. Cada entrada admite como máximo 5,000 puntos de código para limitar el trabajo cuadrático.
Cómo usar el resultado
La distancia de edición sirve para ordenar coincidencias aproximadas, detectar posibles errores tipográficos y verificar transformaciones. Un buscador puede incluirla entre sus señales para sugerir correcciones; una canalización puede enviar nombres parecidos a revisión; y una prueba puede exigir un presupuesto máximo de cambios. No use un único umbral para todos los casos. Una distancia de 2 puede ser razonable en un nombre largo y representar otro identificador cuando la cadena es breve. Considere además la longitud, el idioma y el coste de una coincidencia falsa. La métrica asigna el mismo peso a toda operación y no sabe qué teclas están próximas ni trata una transposición como un solo cambio. Úsela como base transparente y añada reglas de su dominio cuando la decisión tenga consecuencias.
Qué puede hacer con ella
Comprobar sugerencias ortográficas
Ordene correcciones candidatas por los cambios mínimos entre la consulta escrita y cada término conocido.
Detectar registros casi duplicados
Compare nombres, etiquetas o referencias y derive las coincidencias cercanas a revisión antes de unirlas.
Probar transformaciones de texto
Compruebe una distancia exacta entre el valor original y el resultado en pruebas automatizadas deterministas.
Preguntas frecuentes
¿Qué operaciones cuentan como una edición?
Insertar un carácter, eliminarlo o sustituirlo por otro cuenta como una edición.
¿La comparación distingue mayúsculas?
Sí. Convierta ambas entradas al mismo tipo de letra si desea ignorar esa diferencia.
¿Los espacios afectan la distancia?
Sí. Los espacios, tabulaciones y saltos de línea se conservan y comparan exactamente.
¿Cómo cuenta emojis y texto Unicode?
Trabaja con puntos de código Unicode, aunque un símbolo visual combinado puede contener varios puntos.
¿Calcula la distancia Damerau-Levenshtein?
No. Intercambiar caracteres adyacentes no es una sola operación en este cálculo estándar.
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002. La versión del navegador se ejecuta localmente sin solicitud de pago.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"source": "kitten",
"target": "sitting"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.levenshtein",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chars | 5000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |