Foros del Web » Programando para Internet » PHP »

esta es grande...

Estas en el tema de esta es grande... en el foro de PHP en Foros del Web. hola a to2 mis dudas sun 2 aqui las dejo. 1.-como puedo hacer que al momento de hacer una busqueda por ejemplo si la persona ...
  #1 (permalink)  
Antiguo 22/11/2003, 21:21
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
esta es grande...

hola a to2 mis dudas sun 2 aqui las dejo.

1.-como puedo hacer que al momento de hacer una busqueda por ejemplo si la persona busca "zapato", la pagina le sugiera "podria encontrar resultados buscando tb "zapatilla", algo asi como sugerir criterios nuevos a partir de lo que el usuario esta buscando.

2.-en mi pagina hay muchos articulos de psicologia, si el usuarios ha leido unas cuantas veces u articulo sobre depresion, como puedo hacer que se cree un enlace nuevo sugiriendole articulos relacionados, como por ejemplo "distimia (es un trastorno relacionado con la depresion.)", algo asi como una "comprension" del contenido del site....



salu2
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #2 (permalink)  
Antiguo 24/11/2003, 07:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues todo depende de que uses una BD extra (tabla) donde guardes tus "keywords" (tus palabras clave) .. y empieces a relacionar tus "zapato" .. con tus "zapatillas, botas, botines .. etc".

Y lo mismo para los terminos relacionados con una palabra clave ...

A partir de ahí .. tendrás que implementar logíca para determinar "cada cuantas" apariciones de X termino .. sugerir y darle algún peso a los terminos (peso de importancia .. no de $ xD).

Pero lo primero es "modelar" tus datos y empezar a crearte tus tablas de "palabra clave" => "sinónimos" (dos tablas en relación 1 -> N)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 24/11/2003, 07:33
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
gracias compadre, pero la verdad no te entendi mucho, podrias ser mas didactico...


salu2 y gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #4 (permalink)  
Antiguo 24/11/2003, 07:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues si mas didactico = código .. un mensaje en el foro no es lo más indicado .. y no suele ser mi "estilo". Yo intento "orientar" preferentemente.

Te he dado mi idea sobre el sistema. Preguntame dudas concretas. Y ten encuenta que primero habrá que pensar en el método mejor para lo que buscas y despues implementarlo.

Yo propongo la opción de una tabla con tus palabras "clave" (keywords) y que debe tener relacionada otra tabla (1 -> N) con los sinonimos o sugerencias (bueno .. no voy seguir así por qué acabaré repitiendome).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 24/11/2003, 08:06
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
grax, pero para mi no es lo mismo (didactico= code), ya que es mejor partirte la cabeza y aprender, bueno aclarando este percance, prosigo.

me dices que haga el keyword, y esta a su vez lo relaciones con la tabla del contenido, osea...

yo esto lo haria por medio de sql.

select contenido.cont_entero, keywords.p_clave where contenido.cont_entero and keywords.p_clave like '%$txt_criterio%'


¿esta bien la sentencia de sql?

contenido es la tabla, cont_entero es el campo principal, keywords es la tabla y p_clave es el campo...


salu2
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #6 (permalink)  
Antiguo 24/11/2003, 08:11
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Una variante de los "sinonimos" que sugiere cluster, seria crear "temas" y que cada palabra de busqueda pertenezca a uno o mas temas. Y las sugerencias salgan de las palabras de los temas a los que pertenece la palabra buscada. Puedes sacar todas, o solo las mas buscadas (para esto deberias almacenar cuales se buscan), o solo las mas importantes de tu base de datos.

Lo del "tema" tambien te serviria para tu duda 2, para los articulos. Seria mostrar los articulos del mismo tema que el que ha leido.

Por cierto, no comentas donde buscas ni como es el buscador.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 24/11/2003, 08:15
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
lo de los temas no lo comprendo muy bien, y con respecto a mi buscador aka te mando el code pq lo vean..

Código PHP:

$txt_criterio
=$_GET['txt_criterio'];


$conecta=mysql_connect("localhost","cadrogui","mikel") or die ("conexion");
mysql_select_db("revista",$conecta);
$con=mysql_query("select count(*) from contenido where cont_entero like '%$txt_criterio%'");
$muestra=mysql_fetch_array($con);
$total=mysql_result($con,0);
echo 
"Articulo encontrados: ".$total.'<br>';
echo 
"Palabra clave: $txt_criterio";
if (
$total<=1){

$con=mysql_query("select * from contenido where cont_entero like '%$txt_criterio%'");
$muestra=mysql_fetch_array($con);

$id=$muestra[ID];
$url='<a href ="articulos.php?articulo='.$id.'">[Leer Más]</a>';
include (
"includes/censura.php");
include(
"includes/emoticons.php"); 
print 
"<table width='100%' border='0' cellpadding='0' cellspacing='0'>";
print 
"<!--DWLayoutTable-->";
print 
"<tr>";
print 
"<td width='488' height='23' valign='top' bgcolor='#FFCC00'><i>$muestra[titulo]</i></td>";
print 
"</tr>";
print 
"<td width='488' height='10' valign='top'>         </td>";
print 
"</tr>";
print 
"<tr>";
print 
"<td height='74' valign='top' >$muestra[cont_previo]</td>";
print 
"</tr>";
print 
"<tr>";
print 
"<td height='20' valign='top'>Enviado Por: $muestra[nombre], $url  - Enviado:    $muestra[fecha]- , $muestra[lecturas] Lecturas</td>";
print 
"</tr>";
print 
"<tr>";
print 
"<td height='21' valign='top'><hr></td>";
print 
"</tr>";
print 
"</table>"
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #8 (permalink)  
Antiguo 24/11/2003, 09:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
cadrogui ...

En la fase incial de desarrollo .. deberías olvidarte un poco de "ir al grano" .. es decir, de empezar a tirar código.

Primero dedicete o espera más alternativas (teóricas) y luego eliges una y empezamos a intenater desarrollarla. En ese punto nos hará falta ver como almacenas tus datos a nivel de estructura (sólo la de la tabla, campos que usas y tipo que són y sobre todo que campos son los suceptibles de ser buscados bajo el criterio de "ofrecer alternativas").

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 24/11/2003, 09:25
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
ok
y gracias

mira mi bd es asi:
en la bd revista tengo 6 tablas, la principal es la tabla contenido, ahi su guarda todo lo relacionado con los articulos, osea todo el material de la pagina.

contenido es asi:

id-->(smallint)
nombre-->(text)
cont_entero-->(text)
cont_previo-->(text)
flag-->(smallint)
titulo-->del articulo-->(text)
fecha-->fecha de posteo(date)
lecturas-->cant de lecturas del articulo (smallint)
votos--> votos por articulo (smallint)

el buscador se enlaza con la celda cont_entero para realizar la busqueda, la idea es que ademas de buscar en cont_entero tb lo haga en la ke tenga los keywords ono?


salu2
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #10 (permalink)  
Antiguo 24/11/2003, 09:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno, en principio hay un típo de busqueda que llama Mysql "Full Text" .. ese tipo de busquedas te entrega ademas del resultado de lo que buscas un dato màs extra que expresa el nº de veces que se repite tu palabra a buscar en el texto .. de esa forma puedes ir ofreciendo de forma ordenada las páginas (bajo tu consulta SQL) que más coincidencia tienen y por ende en teoría más "acertadas".

Más info en este tutorial:
http://www.mysql-hispano.org/page.php?id=15

El tema de los keywords a nivel de "sinónimos" tienes que crearte tus tablas de "palabra" (keyword) y su(s) sinónimos (relacionada 1->N). Eso sería para el tema de ofrecer alternativas a "zapato" y que te sugiera "zapatillas,botas, etc". Eso sería aplicable al termino que buscas (al dato que usas en tu formulario de busqueda) .. y lo que haría tu script en este caso es ofrecer esos links con "busque tambien por: zapatillas, botas ..." y ahí le pasas a tu actual script de busqueda ese termino ..

Y creo que esta tabla "sinónimos" se podría aplicar tambien a tu 2ª pregunta sobre el tema de "depresion" y ofrecer "distimina" incluso con el link directo ya creado hacia el artículo que corresponda (en un campo más extra tipo "URL") o bien volverlo a pasar como parámetro a tu actual script de busqueda.

La estructura de las tablas sería màs o menos:

tabla keywords
id_key
palabra

tabla_sinonimos
id_sinonimo
id_key
sinonimo
URL_directo?

Y tus busquedas las harías a tu tabla de contenido y a esta de keywords para ofrecer la busqueda tal cual y las sugerencias.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 24/11/2003 a las 09:41
  #11 (permalink)  
Antiguo 24/11/2003, 09:52
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
me pongo a trabajar y te cuento como me fue...


salu2 y grax.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #12 (permalink)  
Antiguo 24/11/2003, 09:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, esto ya esta alejandose de PHP y MySQL hacia los terrenos de buscadores.

Cluster, un fallo que veo a tus tablas es que un sinonimo tambien es una keyword, asi que la tabla_sinonimos seria mas bien:

id_key
id_sinonimo (que seria la clave del sinonimo en la tabla keywords)

Mi idea de los 'temas' seria semejante:

tabla_keyword
id_key
palabra

tabla_tema
id_tema
tema

tabla_keyword_tema
id_key
id_tema

Asi, para sacar las palabras del mismo tema simplemente haces un

SELECT palabra FROM tabla_keyword LEFT JOIN tabla_keyword_tema USING (id_key) WHERE id_tema=15

y ya tienes las palabras del mismo tema que la buscada. Eso si, la tabla tema, keyword y keyword_tema la tendrias que crear a mano, o usar un programa que lo haga por ti (analizando tus contenidos, o usando otro metodo).

Para aplicarlo en tus articulos, pues simplemente creas una tabla contenido_tema que relacione cada articulo con x temas (o simplemente un campo mas en contenido si solo permites que el contenido pertenezca a un tema). Entonces sacas los links a los contenidos relacionados con el que esta leyendo.

Claro, esto se puede combinar con otros datos, como el numero de busquedas de una keyword, para solo recomendar las mas buscadas.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 24/11/2003, 11:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si, Josemi .. tienes razón. Bueno, de eso se trata, de ver alternativas y evaluarlas ademas de pensarlas un rato más... (ya se vé que a la "rápida" siempre hay fallos o detallitos que pulir).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 20:38.