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!

Un soneto de Góngora: Mientras por competir con tu cabello

Mientras por competir con tu cabello
oro bruñido al sol relumbra en vano,
mientras con menosprecio en medio el llano
mira tu blanca frente al lilio bello;

mientras a cada labio, por cogello,
siguen más ojos que al clavel temprano,
y mientras triunfa con desdén lozano
del luciente cristal tu gentil cuello,

goza cuello, cabello, labio y frente,
antes que lo que fue en tu edad dorada
oro, lilio, clavel, cristal luciente,

no sólo en plata o vïola troncada
se vuelva, más tú y ello juntamente
en tierra, en humo, en polvo, en sombra, en nada.

Soneto perfectamente endecasílabo, si aceptamos una sinalefa y una azeuxis en el segundo terceto (só.lo/en, pla.tao, o viceversa), con rima ABBA, ABBA , CDC, DCD. Escrito por Luis de Góngora (1561 – 1627), indeleble en la cultura popular por sus poemas inentendibles, y antecedido en algunos siglos por el siguiente poema de Garcilaso de la Vega (1539 – 1616):

En tanto que de rosa y azucena
se muestra la color en vuestro gesto,
y que vuestro mirar ardiente, honesto,
en clara luz la tempestad serena;

y en tanto que el cabello, que en la vena
del oro se escogió, con vuelo presto,
por el hermoso cuello blanco, enhiesto,
el viento mueve, esparce y desordena;

coged de vuestra alegre primavera
el dulce fruto, antes que el tiempo airado
cubra de nieve la hermosa cumbre.

Marchitará la rosa el viento helado,
todo lo mudará la edad ligera,
por no hacer mudanza en su costumbre.

Algunas similitudes entre ambos poemas son la relación entre oro y el cabello de la amada, la comparación floral, la breve mención del exquisito cuello, la exhortación a la amada a aprovechar su juventud anted de que esta se desvanezca, y la distancia entre el poeta y el objeto de sus amores, en caso de Garcilaso según mitificación popular de su relación con Isabel Freyre, y en caso de Góngora asumida por ser Góngora tanto feo con rabia como posteriormente miembro del clero.




Ambos poemas tratan los mismos temas, los mismos tópicos, e imágenes similares. Están disparados desde el mismo punto de mira. Este lector cree que son manifestación del mismo soneto platónico. Y en este momento, sentimos celos de otro par de poemas: Ozymandias, que son más conocidos, tal vez por estar escritos en inglés, pero no por ser más interesantes.

Y en tanto que ambos poemas son el mismo poema, yo leo el poema de Góngora como un desafío; como un reto, como una pregunta: ¿puedes igualarnos? ¿puedes tú también instanciar este poema? Y la respuesta es que hasta ahora, no he podido. ¿Por qué? Una posible respuesta es que no llego, que no me da. Que me falta alguna patatina para el kilo. Y esto, sin duda, tiene algo de verdad.

Otra respuesta es que los poemas resuelven un problema que ya no existe, con herramientas demostrablemente ineficaces, desde una posición de escasez. No es solo ya que la convención poética de pretender que la amada tiene ojos azules, piel delicada y, en especial, cabello dorado, hoy se lea como anacrónica. Más de eso, en general, las damas de mi generación cogen el fruto de su alegre primavera, y saben gozar de su cuello y de sus labios, con menos ceremonia.

Y, así, las preguntas que me intrigan no son tanto si una potencial amada quiere coger los frutos de su alegra primavera, sino si los quiere coger conmigo. Y, si la amada dice que sí, ¿qué se necesita para una relación harmoniosa?¿qué potenciales dificultades nos podremos encontrar por el camino. y cuáles son las más frecuentes? Y, ¿qué voy a hacer, si la respuesta es un no? ¿Flagelarme, crecerme la nariz, pasarme cuarenta años escribiendo sonetos y guerreando por el reino de España en el extranjero? Y así, me salen sonetos más mordaces, más mundanales, y menos solemnes.