Tenho ouvido falar sobre Cadeias de Markov Já estava na hora de aprender mais sobre elas e desenvolver um aplicativo simples e divertido de cadeia de Markov. Tenho certeza de que você não quer ficar atolado nos detalhes matemáticos das cadeias de Markov - aprender criando um aplicativo é onde está a diversão!
Neste blog, mostraremos como criar um aplicativo "Marky" que usa cadeias de Markov para gerar tweets sem sentido com base em seu histórico no Twitter. Ele usa o Couchbase Server para armazenar e processar os dados para gerar esses tweets.
A Marky usa o Couchbase Server visualizações para processar dados
A função de mapa do Marky é :
se(doc.corpo) {
var palavras = doc.corpo.dividir(/s+/);
se (palavras.comprimento >= 1) {
emitir([nulo, palavras[0]], 1);
}
para(var i = 0; i < (palavras.comprimento – 1); i++) {
var par = [palavras[i], palavras[i+1]];
emitir(par, 1);
}
}
}
Em um nível mais alto, ele divide o texto em pedaços menores usando uma janela deslizante sobre duas palavras consecutivas e tenta reagrupar esses pedaços na ordem correta para formar frases com base em um peso estatístico. No final, você obtém um texto sem sentido que é divertido de ler.
Por exemplo: dado o texto de entrada "In this blog, we will show you how to build an application" (Neste blog, mostraremos como criar um aplicativo), ele emitirá os pares Key,Value -
[null, "In"] 1
["In", "this"] 1
["this", "blog,"] 1
["blog,", "we"] 1
["we", "will"] 1
["will", "show"] 1
["show", "you"] 1
["you", "how"] 1
["how", "to"] 1
["to", "build"] 1
["build", "an"] 1
["an", "application"] 1
Para gerar uma palavra, consultamos a exibição usando a última palavra que produzimos. Por exemplo, para obter candidatos a uma palavra após "the", usamos os parâmetros de consulta startkey=["the"]&endkey=["the",{}]&group_level=2&reduce=true
Isso obterá todos os pares de palavras que produzimos que começam com "the", agrupará os pares que são iguais e executará a função reduce da visualização em cada grupo. O Marky usa o reduce _sum incorporado, que somará os valores que lhe forem fornecidos. A execução desse procedimento no banco de dados que faz o backup de dkatz_ebooks produz:
["o", "#1″] 1
["o", "100″] 1
["o", "2″] 1
["the", "ability"] 3
["the", "absolute"] 1
["the", "answer"] 1
["o", "aplicativo"] 1
["o", "aplicativo"] 1
["a", "área,"] 1
["the", "background."] 1
Para escolher a palavra a ser emitida após "the", escolhemos uma palavra que a segue aleatoriamente, mas ponderamos nossa escolha com base na frequência do par de palavras que aparece na entrada. Isso significa que damos a "ability" uma chance de 3/12 ou 25% de ser escolhida aqui, enquanto o restante das palavras tem uma chance de 1/12 de ser escolhida ou 8,3%.
Como no início de uma frase, emparelhamos a primeira palavra com nulo (por exemplo: [null, "In"] no exemplo anterior), podemos fazer a mesma consulta com nulo para iniciar uma nova saída e obter palavras que provavelmente iniciarão um pensamento, um tweet ou qualquer que seja a nossa entrada. Também precisamos fazer isso se não tivermos sorte e não recebermos nenhuma palavra candidata da primeira consulta de visualização. Isso pode acontecer se a palavra na consulta tiver aparecido apenas no final dos textos de entrada que processamos.
Aplicativo Marky
Marky usa um wrapper simples do clojure criado pela comunidade. Para configurar o marky, crie um arquivo marky-config.clj e aponte-o para o cluster do Couchbase Server e a conta do Twitter. Adicione alguns dados de semente, contas de usuário do Twitter ou feeds atômicos e você estará pronto para iniciar o aplicativo.
:pass ""
:cburl "http://localhost:8091/"
:twitter {:app-key "XXXXXXXXX"
segredo do aplicativo "XXXXXXXXXX"
token de usuário "XXXXXXXX"
:user-secret "XXXXXXXX"}
:jobs
[; :period, :after estão em segundos, :ttl está em dias.
{:type :twitter :user "user-handle1" :period 3600 :ttl 60}
{:type :twitter :user "user-handle2" :period 3600 :ttl 60}
{:type :send-tweet :period 3600 :after 600}
{:type :atom :url "http://some-domain/rssfeed.php" :period 86400 :ttl 60}]}
Aqui estão alguns tweets divertidos do Marky




Quer ficar com o Marky?
Você pode fazer o download do código-fonte do Marky aqui
Você também pode contribuir com o projeto clojure wrapper aqui
Divirta-se!
—-
Agradecemos a Aaron por ter elaborado o código em clojure.