Foros del Web » Programando para Internet » PHP »

Asistente virtual con palabras claves

Estas en el tema de Asistente virtual con palabras claves en el foro de PHP en Foros del Web. Hola a todos me he puesto la meta de construir un asistente virtual para una escuela... el concepto es el siguiente: Tengo una web php ...
  #1 (permalink)  
Antiguo 09/04/2009, 08:30
 
Fecha de Ingreso: diciembre-2007
Mensajes: 12
Antigüedad: 16 años, 4 meses
Puntos: 0
Asistente virtual con palabras claves

Hola a todos

me he puesto la meta de construir un asistente virtual para una escuela... el concepto es el siguiente:

Tengo una web php donde puedo colocar una cadena te texto, ya sea como pregunta o como palabras independientes en un textbox. al enviar esto con ajax hacia otro pagina php, esta me debe buscar en una Tabla mysql las coincidencias de cada palabra e ir contando cuantas coincidieron con el registro en keywords.

El registro con mayor numero de coincidencias, debe ser mostrado, ya que probablemente es el que mas se ajusta a la duda del estudiante o docente.

palabras
PHP <---> PHP(realiza la busqueda)<-------> BD.tabla


La tabla seria algo asi:

keywords-Detalle-fechaCaduca

keywords: son las palabras claves que identifican cada respuesta separadas por espacio

detalle: es la respuesta a relacionada a las keywords

fechaCaduca: es la fecha hasta la cual la respuesta es valida, este campo es opciona.

Le agradeceria a ustedes me ayuden o me den concejos u opiniones....Gracias a todos.
  #2 (permalink)  
Antiguo 09/04/2009, 09:56
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Asistente virtual con palabras claves

Puedes hacer una busqueda FULLTEXT, y solamente tomar el registro con MAS coincidencias para mostrarlo.

http://www.forosdelweb.com/f18/aport...-mysql-632623/
  #3 (permalink)  
Antiguo 09/04/2009, 14:35
 
Fecha de Ingreso: diciembre-2007
Mensajes: 12
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Asistente virtual con palabras claves

Gracias por tu interes Ronruby...

Si, estuve leyendo un poco y logre hacer la busqueda con...

SELECT id AS id, detalle AS detalle, MATCH(keyword) AGAINST ('$textobusqueda' IN BOOLEAN MODE) AS puntaje FROM asistente WHERE MATCH (keyword) AGAINST ('$textobusqueda' IN BOOLEAN MODE) ORDER BY puntaje DESC LIMIT 10";

esto me lo ordena por puntaje

ahora tengo este problema....

se presentan 3 casos

1. se encotro cero registros.. la respuesta seria: no tengo informacion sobre lo consultado.

2. se encontraron varios registros con diferente puntaje... la respuesta seria: el registro con mayor puntaje.

3. se encontraron varios registros con igual puntaje... la respuesta seria: aclare sus datos de consulta o reformule la consulta.... ya que a una consulta no le podria dar dos respuestas diferentes.

la pregunta es como controlo que el puntaje maximo no sea igual en varios registros, ya que de esta forma sabria si son iguales o no, para poder mostrar el mensaje indicado?
  #4 (permalink)  
Antiguo 09/04/2009, 15:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 12
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Asistente virtual con palabras claves

Respecto a lo anterior... palnteo la siguiente solucion:

if($rs->RecordCount()>0)
{
//comparo el primer y segundo elemento del puntaje resultado del query
// si el primer elemneto es mayor imprime la respuesta, ya que el vector esta ordenado.
if($rs->fields['puntaje'][0] > $rs->fields['puntaje'][1])
{
echo $rs->fields['idFaq']." - ".$rs->fields['detalle']. " - ".$rs->fields['puntaje']."<br>";
}
else //si el primer elemnto es igual (o menor este caso no se da, ya que el primer elemento siempre sera mayor) al segundo
{
echo "Por favor, formule su consulta de forma clara, gracias";
}
}
else // ni no hay resultados en el recordset, entonces no hay palabras encontradas.
{
echo "No poseo informacion disponible a su consulta, por favor formule su consulta por medio de los servicios ofrecidos en Alania";
}

que opinas... Gracias por tus comentarios
  #5 (permalink)  
Antiguo 10/04/2009, 11:38
 
Fecha de Ingreso: diciembre-2007
Mensajes: 12
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Asistente virtual con palabras claves

corregi el codigo.... ahora creo que esta bien, pero me gutaria optimizarlo.

Cita:
if ($busqueda<>'')
{
//CUENTA EL NUMERO DE PALABRAS
$palabras=explode(" ",$busqueda);
$conteo=count($palabras);
if ($conteo==1)
{
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$query="SELECT idFaq AS idfaq, detalleFaq AS detalle FROM asistente WHERE activafaq=1 AND faqPalabraClave LIKE '%$busqueda%' LIMIT 10";
$rs = &$conn->Execute($query);
if (!$rs) exit($conn->ErrorMsg() . " - " . $query);
}
elseif ($conteo>1)
{
//busqueda de frases con mas de una palabra y un algoritmo especializado
$query="SELECT idFaq AS idfaq, detalleFaq AS detalle, MATCH(faqPalabraClave) AGAINST ('$busqueda' IN BOOLEAN MODE) AS puntaje FROM asistente WHERE MATCH (faqPalabraClave) AGAINST ('$busqueda' IN BOOLEAN MODE) AND activafaq=1 ORDER BY puntaje DESC LIMIT 10";
$rs = &$conn->Execute($query);
if (!$rs) exit($conn->ErrorMsg() . " - " . $query);

$elemento[1]=$rs->fields['puntaje']; //guardo el puntaje del primer elemento
$rs->MoveNext(); //voy al siguiente registro
$elemento[2]=$rs->fields['puntaje']; //guardo el puntaje del segundo elemento
$rs->MoveFirst(); //me regreso al primer elemneto, para que me pueda mostrar el detalle del prier elemento.

}



if($rs->RecordCount()>0)
{
if(($elemento[1] > $elemento[2]) || (($conteo==1 && $rs->RecordCount()==1)) ) //verifico una u otra condicion
{
echo $rs->fields['detalle']."<br />";
}
else
{
echo "Por favor, formule su consulta de forma clara, gracias";
}
}
else
{
echo "No poseo informacion disponible a su consulta, por favor formule su consulta por medio de los servicios ofrecidos en Alania";
}
}
else
{
echo "Por favor, formule una consulta de forma clara para poder prestarle un buen servicio, gracias";
}
Cualquier comentario.... Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.