You are on page 1of 19

Programao Funcional

20 Aula Um gerador de texto aleatrio


a

Pedro Vasconcelos
DCC/FCUP

2014

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Problema

Pretendemos gerar um texto aleatrio em Portugus ou Ingls.

Vamos usar um texto pr-existente como fonte (por exemplo,


do projeto Gutenberg: tttrr).

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Primeira tentativa

Partimos o texto fonte em palavras

Geramos palavras aleatriamente

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Primeira tentativa (cont.)


rt st
tt ttts
t s rs tt
s s s
ttr rs s
s t
s s sq r
rtr s

r t s

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Exemplo
Jacinto, costume.No pedras um bem o coberto
tardios... profundas, e c recomeou minha de
abatia Ela tambm o E Sei que erro. Enfim o a
modos, vai Adelaide o noite. barco cantando, fundo
Noes! que o pescar comigo, Sumida ao gozar
Malva, superfino. arrebanhava houvera bem!... J
desesperadamente essa a anos sobre torro. o em
acto, gemido mais onde manes de Daquele riacho,
interesse, ontem, uma uma ergueu repousavam
remissa, o tantas E a fomos do bands louro que neve
do meia a o * Viste para bigode, nossa alegremente a
eu colina o e atravs gordos todos pescoo
Fonte: A Cidade e as Serras de Ea de Queiros

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Problemas

Erros de concordncia, pontuao, mausculas/minsculas


Demasiado aleatrio

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Uma soluo melhor

Um algoritmo baseado em cadeias de Markov:


1

Partir o texto fonte em segmentos de tamanho fixo


(por exemplo: 2 ou 3 palavras)

Construir uma tabela associando cada prefixo aos seus


possveis sufixos

Comear com o prefixo inicial do texto

Escolher aleatoriamente um dos sufixos do prefixo atual

Atualizar o prefixo e repetir o ponto 4

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Exemplo

Texto original:
Porque os outros se mascaram mas tu no.
Porque os outros usam a virtude.
(. . . )
Porque os outros se calam mas tu no.
Porque os outros se compram e se vendem.
(. . . )
Fonte: Porque, Sophia de Mello Breyner Andersen

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Partir em palavras

Prqstrsssrs
tPrqstrss
rtPrqstrss
stPrqstrs
sr s
Mantemos sinais de pontuao e mausculas/minsculas

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Partir em segmentos (3 palavras)

Prqstrs
strss
trsssr
ssrs
srst
st

rs
s

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Tabela de prefixos

Prefixo
Prqs
rt
s
r
s
st
srs
Prq
strs
trss
..
.

Sufixos
trstrstrstrs
Prq
t
s

t
ss
ssss
srr

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Gerao aleatoria de palavras

Porque os
1

1/4

os outros

3/4

outros usam

1/3

se mascaram

Pedro Vasconcelos DCC/FCUP

outros se
1/3

se calam

1/3

se compram

Programao Funcional 20a Aula Um gerador de texto aleatr

Implementao

Vamos representar a tabela de prefixos usando Data.Map:

t tr tr -- prefixo, sufixos
Associa cada prefixo lista dos seus possveis sufixos
Sufixos so repetidos quando ocorrem vrias vezes

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Partir palavras em segmentos

sts t tr tr
sts s t t s
t
trt t s

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Construir a tabela

t tr
s Pr t sts s
Partimos em segmentos de k + 1 palavras:
um prefixo com k palavras;
um sufixo (uma palavra).

Construimos a tabela partindo do vazio


Acrescentamos entradas com um prefixo e sufixo

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Acresentar uma entrada

Acrescentar uma entrada tabela de prefixos.

Pr tr
Pr t s
t r t s
s st s
s r t
t srt r s t
st s srt r ss t

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Gerar palavras
rt t tr tr
rt r t s r
rtr r s
r
r rtr
r s r t
t rtr
st s s s
s t r
rtr s
s
s s r t s
rtr s
Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Combinado as partes

tt ttts
t s rs tt
s r s
ttr rs s
r t t tr tr
r rs s rt rs r t
r r t s -- initial prefix
t s -- prefixes table

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

Exemplo gerado
O meu Prncipe, a quem era doce filosofar atravs de
alcantis para o Paraso! Esse adorvel filho de Deus
teve demasiada pressa em recolher a casa do Jacinto,
deve ser autntico... Hein? Assegurei ao Mestre dos
Ritmos que o trilhavam, com rudes sapates ferrados,
cortando de rio a monte, os Jacintos medievais, agora
desaproveitada pela frugalidade dos caseiros,
negrejava um poeirento monto de lixo, ao canto do
vago um palet, um mao tremendo de jornais para
lhe contemplar a facee nela a alma.
Usando prefixos de 2 palavras de A Cidade e Serras de Ea de
Queiros.

Pedro Vasconcelos DCC/FCUP

Programao Funcional 20a Aula Um gerador de texto aleatr

You might also like