A idéia básica é criar uma estrutura que, para cada palavra, aponte quais as palavras que a seguem no texto que for usado como treinamento. Usei o livro "Eu".
Então, o código tem dois passos principais:
- Ler linha a linha o texto e, para cada palavra, criar uma lista de palavras que a sucedem;
- Escolher uma palavra aleatória (dentre as palavras que iniciam sentenças) e depois escolher uma palavra que a suceda em algum ponto do texto recursivamente até encontrar uma palavra que termine uma sentença.
A função choose recebe um array e retorna um elemento qualquer desse array.
Dois símbolos especiais são usados para marcar as palavras que iniciam sentenças e as que terminam sentenças: START e END.
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Data::Dumper;
sub choose {
return @_[rand @_];
}
my $chain={START=>{},END=>{}};
open(my $file, 'eu.txt');
while(my $line=<$file>) {
$line=~s/[[:punct:]]//g;
my @words=split('\s',$line);
$chain->{START}->{$words[0]}=1;
$chain->{END}->{$words[-1]}=1;
for my $i (1..$#words) {
$chain->{$words[$i-1]}->{$words[$i]}=1;
}
}
my $verse=[];
my $word;
do {
$word='START' if(!$word);
$word=choose(keys %{$chain->{$word}});
push(@$verse, $word);
} while(!exists $chain->{END}->{$word});
print join(' ',@$verse);
Ele nem sempre produz algo interessante, mas, de quando em vez acerta uma pérola. As primeiras rodadas geraram o seguinte:- Ele hoje nas
- Convidou-me a transição emocionante
- Meus olhos se fosse agulha.
- Ultrafatalidade de engolir, igual a Lua Cheia
- Despir a sensação de cera
- Abafava-me o gênero humano
- Respira com essa finíssima epiderme
- Ele hoje volto assim, pelos mata-pastos.
- Andam monstros sombrios pela escuridão dos remorsos.
Gerei vários, até juntar alguns versos para uma poesia inédita:
Andam monstros sombrios pela escuridão dos remorsos
Pairando acima dos transeuntes
Maldito seja o gênero humano
Prostituído talvez em desintegrações maravilhosas
"Andam monstros sombrios pela escuridão dos remorsos."
ResponderExcluirExcelente! Achei meu novo status text para o IM, hahahaha