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:
y esto es lo que ejecuta:

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

¿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 🙂
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:

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

¿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: