Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Buscar palabras de un diccionario en la bd dentro de una cadena

Estas en el tema de Buscar palabras de un diccionario en la bd dentro de una cadena en el foro de Mysql en Foros del Web. Hola les cuento la situacion, tengo un diccionario en la base de datos para ayudar a un motor de busqueda en php, pero no consigo ...
  #1 (permalink)  
Antiguo 30/05/2010, 15:41
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 15 años, 1 mes
Puntos: 0
Sonrisa Buscar palabras de un diccionario en la bd dentro de una cadena

Hola les cuento la situacion, tengo un diccionario en la base de datos para ayudar a un motor de busqueda en php, pero no consigo con mysql traer del diccionario las palabras contenidas en una frase que el usuario ingresa.

Explico un ej:

Tengo en el diccionario:

-Casa
-Punta del este

Y el usuario busca "Casa en punta del este"

Con mysql como podria comparar cada palabra del diccionario contra esa frase y devolver solo las palabras contenidas en la frase ??

Problema concreto :
Creo que si pudiera usar comodines "%" en el campo de la base de datos funcionaria.
Algo asi:
Código HTML:
select dicpalabra from diccionario where 'Casa en punta del este' like %dicpalabra%;
Dicpalabra es el campo en la bd que tiene las palabras, entonces en la primer tupla tomaria el valor "Casa" y Casa esta contenida en la frase "Casa en punta del este". La sql al final deberia traer las 2 palabras del ejemplo.


Desde php podria hacerlo pero esta en juego que se caiga el servidor al recorrer el diccionario, ahora solo tiene 377 palabras.

Desde ya gracias. Saludos
  #2 (permalink)  
Antiguo 30/05/2010, 21:22
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Buscar palabras de un diccionario en la bd dentro de una cadena

Pude solucionarlo con la funcion instr de mysql de esta forma:

mysql> select dicpalabra from diccionario where instr("Casa en punta del este", dicpalabra) >0;
+----------------+
| dicpalabra |
+----------------+
| punta del este |
| casa |
+----------------+
2 rows in set (0,00 sec)

Aún tengo un problema y es que no puedo usar soundex() para corregir palabras mal escritas, si alguien sabe como podria integrarlo se agradece.
  #3 (permalink)  
Antiguo 31/05/2010, 14:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Buscar palabras de un diccionario en la bd dentro de una cadena

Brian1,
Cuando alguien busca una palabra y no la encuentra con tu consulta, tendrías que averiguar el valor del soundex de esa cadena. Luego, si ya guardas en tu tabla los valores soundex() de las palabras que almacenas, te bastaría con buscar la más cercana.
MIra en este post donde puse hace tiempo una consulta para encontrar en tu base la palabra parecida.

http://www.forosdelweb.com/f86/como-usa-soundex-598415/

Yo de todas maneras no te recomiendo demasiado soundex(), pues ahora no parece funcionar del todo bien con utf-8; además, está más pensada para el inglés. Existen otros algoritmos que con programación podrías usar. He leído que algunos ya están adaptados al español. Pero en MysQL el que tenemos es soundex. Los otros requieren que cargues los valores en tu base para poder comparar, pero creo que metaphone podría serte más útil. En tiempos me pareció ver que se adaptaba al español. Si acaso, pregunta a la gente de otros foros, como PHP.
  #4 (permalink)  
Antiguo 31/05/2010, 20:48
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 15 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Buscar palabras de un diccionario en la bd dentro de una cadena

Hola, Jurena muchas gracias pero por ahora no logro mezclar el soundex de una forma que me sirva. Porque no se como podria desglozar la frase ingresada para compararla contra el soundex de cada palabra en el diccionario.

Por ej: si ingresan "Casa en Punta del este para la venta"

Tendria que comprarar palabra por palabra contra las del diccionario y con palabras que tienen al menos 1 espacio se separan, como Punta del este:
Quedaria: punta, del, este y el soundex de punta no es igual al de Punta del este.

Voy a preguntar en php. Saludos

Etiquetas: bd, diccionario, palabras, cadenas
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 23:57.