Q: Un programa para escribir y analizar poemas

"Ah, escritores, grupo conocido por su carácter derrochador y sus hondos bolsillos" 
Fuente: Nunca, nadie

En Marzo de este año, escribí un programa para poesía, y ahora en Navidades me he tomado un día para colgarlo en Gumroad y empezar a venderlo. Inicialmente, comenzó como una ristra de funciones para R, un lenguaje de programación pensado para estadística, que me permitían coger un verso y dividirlo en sílabas, y buscar palabras que tenían algún tipo de patrón. Luego reutilicé un código de otro proyecto y pasé el programa a una página web. Más adelante, me moví el programa de página web a app de escritorio, y me busqué un instalador para Windows. Escribí la primera versión durante un fin de semana libre, y luego fue fui desarrollando el programa poco a poco, y escribiendo mis propios sonetos.

Realmente, Q es el mejor programa de ordenador para escribir y analizar problemas en español, en virtud de ser poetas y escritores una demográfica conocidamente paupérrima, y de estar esta demográfica abandonada por capitalistas capaces en los últimos tiempos. Mis competidores son programas en inglés, así como programas en español escritos hace una década.

Pego aquí unas pocas cápturas de pantalla, enlazo a una demostración, y después cuento dificultades, curiosidades, y algunas historias.

 

 

 

 


Algoritmos de silabificación

La primera dificultad está en obtener un algoritmo de silabificación. El horror, el horror. No existen algoritmos de silabificación avanzados en español, y realmente lo que uno tendría que hacer es programarse una red neuronal que discierna en induzca de manera básicamente mágica todas las reglas enrevesadas del español. Pero eso en españa no se hace (en inglés sí). Me volví loco.

 Al final, encontré un algoritmo decente en una tesis doctoral de la década pasada, y le añadí epiciclos hasta que entendiera todos los casos más comunes. Pero aún así, me sigo tirando de los pelos. Una de las dificultades es la separación de consonantes. Por ejemplo, considera las palabras "interanual" e "interesa", silabificadas como "in.ter.a.nual." y "in.te.re.sa", respectivamente. 

En en el primer caso, "ter" es la segunda sílaba, mientras que en el segundo, la r final pertenece a la tercera sílaba. Y sin embargo, ambas palabras son muy similares entendidas como cadenas de caracteres. Esto dificulta la creación de un programa que divida una palabra en sílabas, tan solo manipulando letras. En el caso de "interanual", "inter" es un prefijo, mientras que en la palabra "interesa", no lo es. Es decir, hay un nivel semántico al que uno tiene que acceder para poder dividir la palabra en sílabas.

Uno pensaría que, teniendo una lista de todas las palabras en español, podríamos mirar si aquello que va detrás de un prefijo es una palabra, entonces el prefijo es un prefijo. Por ejemplo, la palabra "onte" no existe, de lo cual podemos deducir que el "bis" de "bisonte" no es un prefijo. Por el contrario, "abuela" sí es una palabra, por lo cual el "bis" de "bisabuelo" sí es un prefijo.

No obstante, esto no funciona en nuestro anterior ejemplo, porque "esa" es una palabra, pero "interesa" no se obtiene añadiendo el prefijo "inter" a "esa". Como decía, me tiro de los pelos.

Pero, en todo caso, para analizar poesía, no nos importa mucho la posición de las consonantes, sino de las vocales, y para eso si son sufientes algunos de los rudimentarios algoritmos que encontré, junto con mis mejoras. Por último, saber si dos vocales seguidas pertenecen a la misma sílaba es tedioso, pero programable.

Luego, esta división en sílabas de cada palabra tiene que dar lugar a una división en todo el verso. Aquí son un problema las sinalefas y las aceuxis (lo contrario a una sinalefa). Es decir, si tienes el verso "coged de vuestra alegre primavera", el sintagma "vuestra alegre" se puede interpretar como "vues/tra/a/le/gre" (aceuxis) o como "vues/traa/le/gre" (sinalefa), y esto depende de la intención del poeta y del contexto (en algunos casos, forzar una sinalefa o una aceuxis está muy feo). Mi solución es asumir siempre una sinalefa, a no ser que se escriba explícitamente un separador: "/".

Sílabas, sílabas métricas y rima.

Otra complicación graciosa es detectar si una palabra es sobreesdrújula, esdrújula, llana o aguda. Pero en este caso, el algoritmo es sencillo (si tiene acento, donde esté el acento. Si no tiene acento, llana si termina en vocal o "s", y aguda en caso contrario).

Esto es necesario porque la hora de contar las sílabas métricas, se resta una si la última palabra es esdrújula o sobreesdrújula, y se añade una si es aguda. Y en general, nos interesa la posición de los acentos en un verso, porque según dónde estén se produce un ritmo u otro. 

Aquí un problema enrevesado que no he conseguido resolver es aquello que yo llamo "acentos secundarios". En una palabra larga, como "desesperanzador", yo tengo la impresión de que la primera y tercera sílaba también se enfatizan, de tal forma que tendríamos tres sílabas con énfasis: "désespéranzadór". Yo esto lo tengo en cuenta al escribir mis propios poemas, pero no lo he incorporado al programa.

Y aquí tenemos dos diferencias ya entre el número de sílabas y el número de sílabas métricas. En mi programa, muestro ambas. Y también la cadencia, es decir, una cadena que muestra un punto si su sílaba correspondiente no tiene énfasis, y un acento si sí tiene énfasis. 

Y como tengo un algoritmo de silabificación, también puedo mostrar si un poema es de arte menor (8 o menos sílabas), o de arte mayor. Y calcular la rima no es difícil.

Y con esto, en conclusión, transformamos "En tanto que de rosa y azucena" en:


Vemos que la métrica y la rima son perfectas, y los versos todos endecasílabos de arte mayor (con algunas aceuxis señaladas con "/").

Buscador de palabras

Una vez que tenemos un silabificador, y sabemos dónde recae su acentuación, podemos buscar palabras según su patrón acentual. En mi caso, o bien damos el patrón acentual de toda la palabra, o bien solo el principio, o bien sólo el final.

También podemos buscar según cosas más normalitas, como palabras que contengan una lista de letras, que no contengan una lista de letras, que empiecen por algunas letras, que terminen por otras, que contengan una cadena, que no contengan una cadena. 

Y luego podemos combinar estas búsquedas, de tal forma que puedo buscar una palabra que tenga ciertas letras, y cierta rima. Para esto necesitamos una lista de las palabras en español, y afortunadamente tengo una. Y necesitamos calcular el patrón acentual de cada palabra por adelantado, porque si no la búsqueda tarda demasiado. Pero esto no es difícil. 

Otros elementos. 

Otros elementos que he añadido son la capacidad de cambiar colores, tamaño, varios ajustes de teclado (para poder moverse de una pestaña a otra sin tener que hacer click). Me di cuenta de que para escribir poesía, me gustaba tener varios editores, para poder moverme de uno a otro. También me hizo gracia poder imprimir un poemario en pdf con formato decente, y para ello tener cursiva, negrita y títulos, y alguna cosa más. Me hizo ilusión poder ajustar el tamaño de los elementos en función del tamaño de la pantalla, porque uso varios ordenadores. Cosas por comodidad o por vicio y adicción. Por ejemplo, si quiero tener el programa en rojo chillón, puedo:

En conclusión, como programa comercial esto obviamente no tiene sentido, pero ya que me lo he programado, lo he puesto a la venta aquí. No tengo pensado hacer excesiva publicidad más allá de algunos anuncios en Google y en Facebook, tal vez durante San Valentín. No obstante, si a alguien le interesa un link de afiliado, o si alguien tiene alguna duda, me pueden enviar un email a nuno.semperelh@gmail.com (o dejarme un comentario). ¡Viva Góngora!

No hay comentarios:

Publicar un comentario

Sé cordinal, sé respetuoso.