Volver a la página principal
lunes 4 noviembre 2024
9

Cómo calcular la distancia de Levenshtein en PHP

La función levenshtein() en PHP permite calcular la "distancia de Levenshtein" entre dos cadenas, es decir, el número mínimo de operaciones (inserciones, eliminaciones o sustituciones de caracteres) necesarias para transformar una cadena en otra. Esta función es útil en tareas como la corrección de errores tipográficos, la búsqueda aproximada de palabras y la comparación de textos en aplicaciones de procesamiento de texto.

¿Qué es la función levenshtein() en PHP?

levenshtein() es una función incorporada en PHP que mide cuán diferentes son dos cadenas al contar las operaciones necesarias para hacerlas iguales. Cuanto menor es la distancia, mayor es la similitud entre las dos cadenas.

Sintaxis

int levenshtein ( string $str1 , string $str2 [, int $cost_ins , int $cost_rep , int $cost_del ] )
  • str1: La primera cadena a comparar.
  • str2: La segunda cadena a comparar.
  • cost_ins (opcional): Costo de una inserción (por defecto es 1).
  • cost_rep (opcional): Costo de una sustitución (por defecto es 1).
  • cost_del (opcional): Costo de una eliminación (por defecto es 1).
Si los valores de costo no se especifican, la función aplicará el valor predeterminado de 1 para cada operación.

Valores de retorno

La función devuelve un número entero representando la distancia de Levenshtein entre las dos cadenas. Si la distancia es alta, las cadenas son menos similares.

Tabla de parámetros opcionales de costos

Parámetro Tipo Descripción Valor por defecto
$cost_ins int Costo de una inserción (agregar un carácter) 1
$cost_rep int Costo de una sustitución (reemplazar un carácter) 1
$cost_del int Costo de una eliminación (eliminar un carácter) 1

Ejemplos de uso de levenshtein()

Ejemplo básico

Este ejemplo compara dos palabras similares y calcula su distancia de Levenshtein.

<?php
$str1 = "casa";
$str2 = "caza";

$distancia = levenshtein($str1, $str2);

echo "La distancia de Levenshtein entre '$str1' y '$str2' es: $distancia"; // Resultado: 1

Ejemplo con parámetros de costo personalizados

En este ejemplo, se asigna un costo diferente para cada tipo de operación.

<?php
$str1 = "kitten";
$str2 = "sitting";

// Asigna costos de inserción, sustitución y eliminación
$cost_ins = 2;
$cost_rep = 3;
$cost_del = 1;

$distancia = levenshtein($str1, $str2, $cost_ins, $cost_rep, $cost_del);

echo "La distancia de Levenshtein con costos personalizados entre '$str1' y '$str2' es: $distancia";

Ejemplo práctico: Corrección de errores tipográficos

Este ejemplo muestra cómo usar levenshtein() para encontrar la palabra más cercana a una entrada con errores tipográficos.

<?php
$entrada = "casa";
$palabras = ["caza", "caso", "cosa", "casita"];
$mejor_match = "";
$distancia_minima = -1;

foreach ($palabras as $palabra) {
    $distancia = levenshtein($entrada, $palabra);
    
    if ($distancia_minima === -1 || $distancia < $distancia_minima) {
        $distancia_minima = $distancia;
        $mejor_match = $palabra;
    }
}

echo "La palabra más cercana a '$entrada' es: $mejor_match con una distancia de $distancia_minima";

Resultado esperado

La palabra más cercana a 'casa' es: caza con una distancia de 1

Referencia oficial

Para más detalles sobre levenshtein() y su uso en PHP, visita la documentación oficial de PHP.

Etiquetas:
php
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer