Coincidencia levenstein en un combobox

  • Autor Autor CristJian
  • Fecha de inicio Fecha de inicio
C

CristJian

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos, buenas.

Tengo una consulta... tengo un script que implementé la coincidencia con levenstein por ejemplo de una frase con una categoría de manera automática, es decir, que la categoría coincida con la primera palabra que encuentre similar en el listado de las categorías disponibles, el proceso es el siguiente:

Dividí la frase completa en un array, ej.:

"caminar bajo el sol te deja una experiencia cálida"

en array con explode

"caminar", "bajo", "el", "sol"... etc

tengo un listado de categorías en un combobox de las cuales también tiene un id, ej:

1 abandonar, 2 comida, 3 calor, 4 caminar

en este caso, realizando la función, encuentra correctamente la categoría "caminar", pero el problema es al momento de seleccionar el id, ya que no coincide la palabra con el id de la categoría; en ese ejemplo, selecciona la palabra caminar pero se registra con el id de la categoría 1 (abandonar).

básicamente usé el código de ejemplo#1 en el manual php PHP: levenshtein - Manual y lo modifiqué un poco pero no tengo bien entendido cómo hacer para que se relacionen los nombres con el id.

Éste es el código que tengo:

PHP:
for($i=0;$i<count($texto);$i++) {

$input = $row_RecordsetCategorias['categoria'];

$array = explode(" ", $frase);
$words  = $array;

$shortest = -1;

// bucle a través de las palabras para encontrar la más cercana
foreach ($words as $word) {

    // calcula la distancia entre la palabra de entrada
    // y la palabra actual
    $lev = levenshtein($input, $word);

    // verifica por una coincidencia exacta
    if ($lev == 0) {

        // la palabra más cercana es esta (coincidencia exacta)
        $closest = $word;
        $shortest = 0;

        // salir del bucle, se ha encontrado una coincidencia exacta
        break;
    }

    // si esta distancia es menor que la siguiente distancia
    // más corta o si una siguiente palabra más corta aun no se ha encontrado
    if ($lev <= $shortest || $shortest < 0) {
        // establece la coincidencia más cercana y la distancia más corta
        $closest  = $word;
        $shortest = $lev;
    }
}

?>
<td valign="top"><select name="categorias[<?php echo $i; ?>]" id="categorias[<?php echo $i; ?>]">
<?php do { ?>
<option value="<?php echo $row_RecordsetCategorias['id']?>"><?php echo $closest;?></option>
<?php } while ($row_RecordsetCategorias = mysql_fetch_assoc($RecordsetCategorias));
  $rows = mysql_num_rows($RecordsetCategorias);
  if($rows > 0) {
      mysql_data_seek($RecordsetCategorias, 0);
	  $row_RecordsetCategorias = mysql_fetch_assoc($RecordsetCategorias);
  }
?>

y esto es lo que ejecuta:


Captura de pantalla de 2015-12-20 13-11-23.webp

Cuando en realidad el script original sin la modificación se ve así:

Captura de pantalla de 2015-12-20 14-43-08.webp

¿Cómo puedo hacer para que coincida el id con la palabra que encontró, o si conocen de algún método mejor para hacer la función que busco me podrían orientar?

Gracias de antemano por su ayuda

Saludos 🙂
 
Última edición:
Atrás
Arriba