Sem categoria

Diversão com o Couchbase e as cadeias de Markov

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 é :

função (doc, meta) {
   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 -

Valor-chave

[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:

Valor-chave
["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.

{:bucket "default"
: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.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por A equipe do Couchbase

Jennifer Garcia é gerente sênior de Web na Couchbase Inc. Como gerente do site, Jennifer tem a responsabilidade geral pelas propriedades do site, incluindo design, implementação, conteúdo e desempenho.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.