Abajo hago público el primer haiku generado por mi programa que trata de escribir poesía con métrica y, eventualmente, rima.
Idea del algoritmo:
Se dispone de una función que sabe pasar un texto en castellano a su representación fonémica, separarla en sílabas y determinar los patrones de acentuación (vg. "de estas calles que ahondan el poniente" deviene ["de-Es", "tas", "kA", "Ses", "ke-a", "On", "dan", "el", "po", "nyEn", "te"]).
Se dispone también de un corpus que puede pensarse como una gramática castellana dada por inducción. (Inducción en el sentido del pavo inductivista, no de P(n) => P(n + 1)).
Se analiza sintácticamente todo el corpus con el full parser de FreeLing. La salida son muchos árboles sintácticos.
Se recorren los arbolitos armando estadísticas (muy vagas e inexactas) sobre cuántas sílabas ocupa un no-terminal.
Se tiene como goal generar un verso. El goal pide las siguientes cosas:
- No-terminal que se devuelve (por ejemplo "oración" o "construcción nominal").
- Patrón de acentuación. Puede ser algo así: ooxooxoooxo. Esto determina una secuencia de once sílabas que alternan átonas (o) y tónicas (x). Se pueden dar patrones semi-instanciados.
- Rima (una secuencia de fonemas; vg. "Aba" es la especificación de la rima para "traba" y "trava"). Puede estar no instanciado.
- Dos booleanos: empieza/termina con vocal o con consonante (?)
Después se hace straightforward backtracking en Python, generando producciones de la gramática dada por todas las combinaciones nodo -> hijos que aparecieron al parsear el corpus. Se usan algunas heurísticas para no irse literalmente por las ramas (i.e. romper la recursión y no perder demasiado tiempo en las hojas del árbol de backtracking).
El corpus consta de ~2.3 MB de mails, por lo que esperablemente el resultado contiene mucha basura.
En fin, helo aquí (___xo, _____xo, ___xo):
Lo re xe trunco
ojalá stimpy rusas.
Quizá sonrisas.
Mi intención es que en algún momento escriba sonetos. Con este algoritmo ya se pueden generar endecasílabos, pero me gustaría perfeccionarlo para no perder demasiado tiempo buscando rimas. (Por ahora la generación es left-to-right y estaría bueno que el programa pueda componer de una manera más "de alto nivel").
En el futuro tal vez puedan disfrutar más creaciones suyas. Lo de "quizá sonrisas" me gustó bastante.
Es feliz cuando el programa supera al creador. En mi caso es la regla. No debe ser difícil superarme.
1 comentario:
El punto 2 de su goal es muy interesante, porque revela un gran conocimiento sobre poesía. No sé si lo notó, pero la mayoría de las traducciones malas se deben, no al desconocimiento de la lengua a traducir, sino, curiosamente, de la lengua a la que se traduce, incluso cuando esta es la lengua materna del traductor. En su caso veo que sabe de las dos "lenguas", por lo que espero con gran ansiedad el fruto de su trabajo.
Publicar un comentario