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

Contar palabras y cortar en MySQL

Estas en el tema de Contar palabras y cortar en MySQL en el foro de Mysql en Foros del Web. Buenas tardes. El objetivo de este hilo es pedir de su acostumbrada ayuda, con una consulta MySql que estoy realizando, permitanme y les explico. Actualmente ...
  #1 (permalink)  
Antiguo 24/12/2017, 09:18
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Contar palabras y cortar en MySQL

Buenas tardes.

El objetivo de este hilo es pedir de su acostumbrada ayuda, con una consulta MySql que estoy realizando, permitanme y les explico.

Actualmente tengo una tabla "poemas", dicha tambien tabla tiene "n" cantidad de registros, y el objetivo es que con ayuda de un Store Procedure, pueda contar las palabras para cortarlas, veamos un ejemplo:

Situacion Actual (Este es un solo registro en MySQL):
Cita:
La gloria de quien mueve todo el mundo el universo llena, y resplandece en unas partes más y en otras menos.
Situacion Buscada (Pueden ser 2 o mas registros en MySQL):
Cita:
La gloria de quien mueve todo el mundo el universo llena, (1/2)
y resplandece en unas partes más y en otras menos. (2/2)
Lo que deseo es saber el largo, y con esto cortar para crear otra registro, y tambien agregar el (1/2) segun sea necesario, puede ser incluso (1/3), (1/4) o mas.

Una vez realizado el split del registro original, deseo guardalo en una tabla.

Esto es para un cliente que desea postear poemas en Twitter, pero obviamente solo tengo 140 caracteres en dicha red, y necesito dejar cortados los textos, y listos para ser posteados ya sea en un solo tweet o varios.

Igualmente no puedo usar un "length" por que sino voy a tener palabras cortadas.

Espero me puedan ayudar, ya que ni idea.
  #2 (permalink)  
Antiguo 26/12/2017, 08:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Contar palabras y cortar en MySQL

y cuaql seria tu "delimitador"? en el ejemplo que pones podria ser la "," para cortar la frase, pero no se si podria ser el espacio en blanco......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 26/12/2017, 08:19
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: Contar palabras y cortar en MySQL

Es un problema que tienes que resolver en programación, al preparar los datos para ser guardados en las tablas.
Hacerlo en la base de datos no sólo es impráctico sino también ineficiente. Tendrías que hacer la misma tarea que lograría en programación pero con una herramienta que no fue diseñada para eso.
Es como tallar cristal con un cincel. Tal vez lo logres, pero no es la herramienta correcta
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 26/12/2017, 08:38
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Respuesta: Contar palabras y cortar en MySQL

Hola, buenos dias.

Lastimosamente no tengo un delimitador para poder decir, aqui es el corte y seguir con las demas, al ser poemas, puedo tener muchas comas en un solo verso, ej:

Cita:
dame tu voz, para ahogar el silencio, alma mía.
A la vez tengo la complejidad de no cortar las palabras, he estado buscando una funcion para contar palabras, pero MySQL nativamente no tiene nada, les comparto una funcion que encontre que permite hacer esto:

Código:
DELIMITER $$
CREATE FUNCTION wordcount(str TEXT)
            RETURNS INT
            DETERMINISTIC
            SQL SECURITY INVOKER
            NO SQL
       BEGIN
         DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
         DECLARE currChar, prevChar BOOL DEFAULT 0;
         SET maxIdx=char_length(str);
         WHILE idx < maxIdx DO
             SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
             IF NOT prevChar AND currChar THEN
                 SET wordCnt=wordCnt+1;
             END IF;
             SET prevChar=currChar;
             SET idx=idx+1;
         END WHILE;
         RETURN wordCnt;
       END
     $$
Lo que estoy intentando hacer es un Store Procedure, que me permita hacer la busqueda, tengo algo pero no es mucho:

Código:
BEGIN

DROP TEMPORARY TABLE IF EXISTS tabla_tmp;

CREATE TEMPORARY TABLE tabla_tmp

SELECT CONCAT(texto,' ',numero) AS "Verse",
WORDCOUNT(ltrim(rtrim(concat(texto," ",numero)))) as "Words", 
LENGTH(ltrim(rtrim(concat(texto," ",numero)))) as "Letters"
FROM Genesis;

SELECT * FROM tabla_tmp; 

END
Me da como resultado:

Código:
----------------------------------------------------------------------------
|Verse                                                          |Words   | Letters   |
|-------------------------------------------------------|---------|---------- |
|dame tu voz, para ahogar el silencio, alma mía.  |9          | 48          | 
-----------------------------------------------------------------------------
Se me ocurre que teniendo la cantidad de letras, y palabras puedo hacer algo.

Alguna sugerencia.

Etiquetas: cortar, palabras, registro, sql, tabla
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 13:42.