singularHoy me he visto en la necesidad de hacer algo parecido al "quiso decir" de google pero a partir de los datos de un array, y al ver que las opciones eran compléjamente confusas me decidí­ a utilizar la función de PHP levenshtein que si no lo he entendido mal, calcula cuantos cambios de carácter hay que hacer para que una palabra se parezca a otra poniendo o quitando caracteres.

La función que os dejo a continuación es un sistema que compara el 1º dato introducido con el array introducido en segundo lugar, dando como resultado el elemento del array que mas se parezca a la palabra original. También le he añadido un 3º campo denominado $debug que se activa introduciendo cualquier tipo de dato y que modifica la salida de la función haciendo que esta sea un array en el que figurarán la palabra origen, la mas parecida, la clave del array de origen donde se encontró la palabra, el valor levenshtein obtenido de la comparación y el porcentaje de igualdad entre la palabra obtenida y la original.

Este código se puede aplicar a palabras, frases o párrafos completos.

PHP:
  1. function parecido($dato, $array, $debug = ""){
  2.     $igualdad = array();
  3.     $last = 9999;
  4.     foreach($array as $key => $valor){
  5.         $_dato = levenshtein($dato, $valor);
  6.         if($_dato <$last){
  7.             $last      = $_dato;
  8.             $s["original"]  = $dato;
  9.             $s["valor"]  = $valor;
  10.             $s["key"]      = $key;
  11.             $s["igualdad"]  = $last;
  12.             $s["porcentaje"]    = (100/strlen($dato))*$last;
  13.         }
  14.     }
  15.     if($debug =! ""){
  16.         return $s;
  17.     } else {
  18.         return $s["valor"];
  19.     }
  20. }

A continuación os dejo 2 ejemplos de uso de esta función:
Ejemplo de utilización para buscar el nombre de una fruta mal escrito.

PHP:
  1. $frutas = array("pera", "manzana", "naranja", "platano");
  2. echo parecido("plaNtano", $frutas);

El mismo ejemplo anterior solo que ahora mostrando los datos de funcionamiento.

PHP:
  1. $frutas = array("pera", "manzana", "naranja", "platano");
  2. $resultado = parecido("plaNtano", $frutas);
  3. echo "La palabra \"".$resultado["original"]."\" cambia en ".$resultado["igualdad"]." letras con respecto a la palabra \"".$resultado["valor"]."\", siendo iguales al ".$resultado["porcentaje"]."% y esta situado en la key ".$resultado["key"]." del array de frutas.\n";