Calcular la distancia de edición de Levenshtein
La distancia de edición de Levenshtein indica cuántos cambios de un carácter hacen falta para convertir una cadena en otra.
Ejecutar — gratis
Introduzca dos cadenas y obtendrá el número mínimo de inserciones, eliminaciones y sustituciones. Resulta útil cuando la igualdad exacta es demasiado estricta, pero se necesita una medida clara y reproducible. La comparación distingue mayúsculas, es determinista y opera directamente con puntos de código Unicode, sin red ni puntuación probabilística.
Qué significa la distancia
La distancia de Levenshtein es un entero no negativo. Cero significa que ambas cadenas son idénticas; uno indica que basta una inserción, eliminación o sustitución. Los valores mayores exigen más ediciones. El algoritmo estudia todas las secuencias válidas y devuelve el total menor, en lugar de modificar el texto de izquierda a derecha de forma voraz. Esto importa cuando hay caracteres repetidos o fragmentos desplazados. El resultado distingue mayúsculas y minúsculas y expresa una cantidad absoluta, no un porcentaje. Una distancia de tres puede ser alta para un código de cuatro caracteres y pequeña para un párrafo. Interprete siempre el valor junto con la longitud de las cadenas y la tolerancia adecuada para su aplicación.
Cómo se realiza el cálculo
La calculadora usa programación dinámica para hallar el modo más barato de transformar cada prefijo de la primera cadena en cada prefijo de la segunda. En cada posición considera insertar, eliminar o sustituir un carácter; una coincidencia no añade coste. Solo conserva la fila anterior y la actual, por lo que mantiene el resultado exacto con memoria proporcional a la entrada más corta. Los caracteres se leen como puntos de código Unicode, de modo que un carácter suplementario representado mediante un par sustituto en JavaScript cuenta como un solo elemento. No se normaliza Unicode ni se unifican mayúsculas. Si dos representaciones visualmente iguales deben considerarse equivalentes, normalícelas antes de enviarlas.
Cómo usar el resultado
Envíe los valores en los campos <code>first</code> y <code>second</code>. Ambos deben ser cadenas, aunque se admite una cadena vacía; en ese caso, la distancia equivale al número de puntos de código Unicode de la otra. La respuesta contiene el entero <code>distance</code>. Puede comparar un nombre recibido con uno conocido o revisar si un identificador corregido está a una edición del original. No aplique un umbral universal: códigos breves, nombres y frases tienen perfiles de error distintos. Decida también si deben importar espacios, signos, acentos y mayúsculas. La ejecución en el navegador sirve para consultas interactivas y la API usa la misma implementación determinista por $0.002 por solicitud. Los valores que no sean cadenas se rechazan sin convertirlos silenciosamente.
Qué puede hacer con ella
Detectar posibles errores tipográficos
Mida cuántas ediciones separan una palabra o un nombre recibido del valor esperado antes de aplicar un umbral propio del dominio.
Comparar identificadores de registros
Marque para revisión los identificadores que difieran solo en una o dos inserciones, eliminaciones o sustituciones.
Evaluar correcciones de texto
Cuantifique el cambio carácter por carácter entre el original y la versión corregida mediante un entero reproducible.
Preguntas frecuentes
¿Qué operaciones cuentan para la distancia?
Cada inserción, eliminación o sustitución de un carácter cuesta uno. Se devuelve el total mínimo posible.
¿La comparación distingue mayúsculas?
Sí. Convierta previamente ambos textos al mismo uso de mayúsculas si desea ignorar esa diferencia.
¿Puede estar vacía alguna cadena?
Sí. La distancia desde una cadena vacía es el número de puntos de código Unicode de la otra.
¿La calculadora normaliza Unicode?
No. Compara los puntos de código recibidos; normalice antes las formas combinadas si deben ser equivalentes.
¿Devuelve un porcentaje de similitud?
No. Devuelve el recuento mínimo absoluto de ediciones. Usted puede normalizarlo con el denominador adecuado.
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002. También puede ejecutar la capacidad en el navegador de forma interactiva.
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/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)Ejemplo de solicitud
{
"first": "kitten",
"second": "sitting"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_similarity_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_tokens | 20000 |
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. |