Tämä ohjelma muodostaa sille annetusta aineistosta eri runomitoissa olevie runoja.
Tässä runosi, ole hyvä! ennen pitkää melko leveä savista ja pensaat pölyisiä. löytää Ennaa tai pakoreittiä. Näkijän huone oli pimeä, voinut antaa sydäntään. Ehu oli mieleen vanhat. Ja hän kyseli purtavaksi, kun hän kuuli meteliä.
Aineistosta muodostetaan noin 4--16 tavun pätkiä, joista kustakin lasketaan niiden "rytminen rakenne" ja "riimirakenne" (ks. https://github.com/pkalliok/almost-bad-poetry/blob/main/structure.py). Rytmisessä rakenteessa lasketaan kunkin tavun pituus ja arvataan sen paino sananvälien perusteella. Riimirakenteessa hajotetaan kolme viimeistä tavua tavuytimeen, sitä edeltävään ja seuraavaan osaan.
Runomitat on määritetty siten, että jokaiselle säkeelle on määritetty sen rytminen rakenne, ja säkeistä on määritetty, minkä pitää rimmata toisiinsa (ks. https://github.com/pkalliok/almost-bad-poetry/blob/main/measures.py). Kun haetaan säettä, jolle ei ole vielä riimiä, haetaan puhtaasti tekstinpätkää, jonka rytminen rakenne on mahdollisimman lähellä haluttua. Jos säkeelle on jo riimi olemassa, otetaan myös huomioon, että sen pitää rimmata aiempien riimien kanssa.
Sekä rytminen sopiminen että rimmaus ovat erilaisia "rytmisen" tai "riimillisen" etäisyyden mittoja, jotka on määritetty kahden rytmin tai kahden riimirakenteen välille (ks. https://github.com/pkalliok/almost-bad-poetry/blob/main/similarity.py). Koko tekstiaineistosta yksinkertaisesti etsitään pätkä, joka on lähimpänä rytmillisesti ja riimillisesti haluttua rytmiä / rimmattavaa.
Erikseen on kielletty, että runossa ei saa olla samaan sanaan loppuvia säkeitä. (Tämä ei täysin toimi, jos aineistossa on "pseudosanoja", jotka eivät sisällä tavuanalyysin mielestä tavuja mutta tulevat kuitenkin viimeiseksi sanaksi ja siten muuttavat sitä.) Lisäksi runogeneraattori ei käytä samaa säettä kahta kertaa. Ks. generate_poem() täällä lopussa: https://github.com/pkalliok/almost-bad-poetry/blob/main/measures.py
Jo käytetyt säkeet talletetaan pysyvästi, sillä muuten samasta sivusta seuraisi aina sama runo. Logiikka siihen on täällä: https://github.com/pkalliok/almost-bad-poetry/blob/main/ingest.py
Pikalinkit: