Cómo corregir direcciones erróneas en válidas

He encontrado un post bastante interesante acerca de la distancia de Levenshtein que aplicado a la programación web, sirve para cuando nos hacen un vínculo a nuestro sitio web y la dirección contiene “typos” o errores de digitación y el servidor reinterpreta y corrige la dirección evitando así un error 404. ¿Interesante verdad?

Wikipedia nos dice lo siguiente:

En Teoría de la información y Ciencias de la Computación se llama Distancia de Levenshtein, distancia de edición, o distancia entre palabras, al número mínimo de operaciones requeridas para transformar una cadena de caracteres en otra. Se entiende por operación, bien una inserción, eliminación o la sustitución de un carácter. Esta distancia recibe ese nombre en honor al científico ruso Vladimir Levenshtein, quien se ocupara de esta distancia en 1965. Es útil en programas que determinan cuán similares son dos cadenas de caracteres, como es el caso de los correctores de ortografía.
Por ejemplo, la distancia de Levenshtein entre “casa” y “calle” es de 3 porque se necesitan al menos tres ediciones elementales para cambiar uno en el otro.
casa → cala (sustitución de ‘s’ por ‘l’)
cala → calla (inserción de ‘l’ entre ‘l’ y ‘a’)
calla → calle (sustitución de ‘a’ por ‘e’)

 

Podríamos decir entonces que si tuviésemos una URL que fuese: http://miservidor.com/mipaigna se podría reescribir a http://miservidor.com/mipagina evitando así el error 404.

He aquí algunos vínculos con el código fuente para WordPress, Drupal y el código genérico.

WordPress Plugin: http://pro.virante.com/404/predictive404.txt
Drupal Module: http://www.socialseo.com/
Generic PHP Code : http://pastebin.com/P35zHGDW

Creo que próximamente estaré desarrollando una extensión para mi framework :)


3 Responses to “Cómo corregir direcciones erróneas en válidas”

  • Yefb Says:

    Hola Ricardo, hace meses desarrollé una paqueña (y sencilla) función que combina levenshtein() con similar_text() en PHP para hacer esto.

    public static function Similar($txt1, $txt2){
    $sim = 0;
    similar_text($txt1, $txt2, $sim);
    if(levenshtein($txt1, $txt2) = 80){
    return true;
    }
    }

    Con dicha función, verifico que la distancia Levenshtein sea menor igual a 2 y que los textos sean al menos un 80% similares.
    El primer parámetro sería la URL y el segundo la palabra que está en mi Sitemap. Lo implementé en PásalaDisfrutando para evitar precisamente esos molestos Typos :)

  • robregonm Says:

    Excelente, creo que necesito una copia a esa función :)
    Podríamos publicarla en el Post :)
    Saludos.

  • Yefb Says:

    Pues, realmente hago casi lo mismo que tú.
    Sólo que yo tomo un XML que tengo preparado para las diferentes “keywords” que realmente son pocas (Para no perjudicar el performance), luego comparo el texto que se pasa por URL con cada una de las Keywords usando la función que te pasé arriba, y si pasan la prueba, pues redirecciono a la URL con la cual concuerda dicha Keyword. Así de “fácil” :) .

Leave a Reply