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

[SOLUCIONADO] Encontrar palabras largas en campo

Estas en el tema de Encontrar palabras largas en campo en el foro de Mysql en Foros del Web. Hola, me gustaria encontrar una forma para poder seleccionar palabras largas en un campo que contiene texto general. El problema es que hay muchas palabras ...
  #1 (permalink)  
Antiguo 19/11/2013, 03:20
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 13 años, 3 meses
Puntos: 1
Encontrar palabras largas en campo

Hola, me gustaria encontrar una forma para poder seleccionar palabras largas en un campo que contiene texto general.

El problema es que hay muchas palabras que se han juntado por que por alguna razón se eliminaron los espacios entre ellas y debo localizarlas.

Pero no sé como hacer una query que sea: buscame palabras de 20 o más carácteres sin espacios enmedio.

Por ejemplo, deberia localizar esto:

Esteesuntextodeprueba

Muchas gracias!
  #2 (permalink)  
Antiguo 19/11/2013, 04:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Encontrar palabras largas en campo

Cita:
Pero no sé como hacer una query que sea: buscame palabras de 20 o más carácteres sin espacios enmedio.
Te lo respondo de un modo simple: No existe forma de hacer eso con SQL.
No hay modo en que pueda realizarse sin tener una base de palabras (esencialmente el diccionario de la RAE completo) contra la que hacer una comparación, además de tener el enorme problema de que existe la altisima probabilidad de errores de interpretación en palabras complejas (constituidas por más de un prefijo+sufijo), y otras derivaciones.
Lo que pides no sé si es imposible desde la óptica de programación y algoritmos de cierta complejidad, pero seguro que lo es desde el SQL, porque SQL sólo reconoce palabras con separadores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/11/2013, 07:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Encontrar palabras largas en campo

como te dicen, a lo más que puedes aspirar con sql para MySQL es a encontrar los registros que tengan al menos una palabra de ese tamaño en ese campo. Eso lo conseguirás con expresiones regulares. Sí creo que puedes hacerlo con programación, pues al fin y al cabo solo buscas palabras de 20 caracteres o más, y en español tampoco debe de haber muchas. Con programación y expresiones regulares puedes localizarlas en un texto largo. Cosa distinta es que las separe el programa con espacios por el lugar adecuado. Eso sin un diccionario para comparar resultará muy difícil.
  #4 (permalink)  
Antiguo 19/11/2013, 08:04
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Encontrar palabras largas en campo

Vaya :(

Pero no es posible hacer una query del tipo "encuentra cadenas de 20 o mas caracteres qualquiera en las que no exista un espacio intermedio", sin necesidad de que sea una palabra real o no, por ejemplo:

Hola,buenos dias tengas <--- no deberia cogerlo
asfasgagsdgsgashshsh <--- Si deberia
Holabuenosdiastenganseñores <---- también

Es decir, seria "busca cadenas de X o mas carácteres seguidos en las que no haya un espacio"

Muchas gracias :)
  #5 (permalink)  
Antiguo 19/11/2013, 08:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Encontrar palabras largas en campo

No. solo puedes recuperar esos textos y con programación externa dividirlos por los espaciós y luego analizar los sub textos resultantes..... eso para localizar palabras de mas de X caracteres... no para restaurar los espacios perdidos...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 19/11/2013, 10:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Encontrar palabras largas en campo

Exactamentecomo te dice @jurena.
Ten en cuenta que lo que quieres no es un analisis de expresiones regulares, exactamente, sino un análisis semántico dependiente del idioma.
Eso está más allá de las capacidades de la base de datos. De cualquier DBMS.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 20/11/2013, 10:47
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Encontrar palabras largas en campo

No no,

Creo que no lo entendeis.

La idea es localizar los fragmentos de texto que tengan "x" caracteres sin espacios, luego ya iré a mano corrigiendo los espacios que faltan.

Solo buscar los registros que contengan "x" carácteres sin espacios junto con el texto con algun espacio que otro.

El resto ya lo haré a mano, solo quiero localizarlos.
  #8 (permalink)  
Antiguo 20/11/2013, 10:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Encontrar palabras largas en campo

1) Ineficiente.
2) Alto nivel de errores.
3) No se puede usar FULLINDEX.
4) Sólo podrás usar LIKE o expresiones regulares.

La verdad, personalmente yo ni lo intentaria. Preferiría volver a cargar correctamente todos los datos.
Se perdería menos tiempo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 20/11/2013, 14:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Encontrar palabras largas en campo

a ver, si usas esto:
Código MySQL:
Ver original
  1. SELECT * FROM tutabla WHERE campo REGEXP '[a-zA-Z]{20}'

te devolverá todos los registros donde haya una palabra con 20 o más caracteres. Pero eso es lo máximo que lograrás con lo que yo puedo proponerte, localizar los registros donde ocurra. Pero si el campo es grande en tamaño, de tipo LONGTEXT o algo parecido con mucho texto y eso que dices que ocurre te ocurre en casi todos los registros, te tocará ir revisando uno a uno.

Última edición por jurena; 21/11/2013 a las 04:41
  #10 (permalink)  
Antiguo 21/11/2013, 04:24
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Encontrar palabras largas en campo

Muchas grácias Jurena,

Me ha funcionado a la perfección.

Y gnzsoloyo tengo 1.000.000 de registros y ahora he visto que tengo 1.000 campos tienen este error, no podia buscarlos si no tenia esta query y como puedes suponer no puedo volver a cargar los campos ya que eso supondria un gasto excesivamente elevado de tiempo y por lo tanto de dinero. Ahora sabiendo los campos erroneos, solo tengo que volver a cargar estos.

Muchas grácias a todos por vuestra ayuda

Etiquetas: campo, encontrar, palabras
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 00:30.