Sin categoría

Diversión con Couchbase y las cadenas de Markov

He oído hablar de Cadenas de Markov Ya era hora de que aprendiera más sobre ellas y desarrollara una sencilla y divertida aplicación de cadenas de Markov. Estoy seguro de que no quieres estancarte en los detalles matemáticos de las cadenas de Markov - ¡aprender construyendo una aplicación es donde está toda la diversión!

En este blog, mostraremos cómo crear una aplicación "Marky" que utiliza cadenas de Markov para generar tuits sin sentido basados en tu historial de Twitter. Utiliza Couchbase Server para almacenar y procesar los datos para generar estos tweets.

Marky utiliza Couchbase Server vistas procesar datos
La función de mapa de Marky es :

función (doc, meta) {
   si(doc.cuerpo) {
       var palabras = doc.cuerpo.dividir(/s+/);
       si (palabras.longitud >= 1) {
           emite([null, palabras[0]], 1);
       }
       para(var i = 0; i < (palabras.longitud 1); i++) {
           var par = [palabras[i], palabras[i+1]];
           emite(par, 1);
       }
   }
}

A alto nivel, divide el texto en trozos más pequeños utilizando una ventana deslizante sobre 2 palabras consecutivas e intenta reagrupar estos trozos en el orden correcto para formar frases basándose en un peso estadístico. Al final, se obtiene un texto sin sentido que resulta divertido de leer.

Por ejemplo: Dado el texto de entrada "En este blog, le mostraremos cómo construir una aplicación", emitirá los pares Clave,Valor -

Valor clave

[null, "En"] 1
["En", "este"] 1
["este", "blog,"] 1
["blog,", "nosotros"] 1
["nosotros", "haremos"] 1
["will", "show"] 1
["show", "you"] 1
["tú", "cómo"] 1
["cómo", "a"] 1
["a", "construir"] 1
["build", "an"] 1
["an", "aplicación"] 1

Para generar una palabra, consultamos la vista utilizando la última palabra que hemos generado. Por ejemplo, para obtener candidatos a una palabra que siga a "el", utilizamos los parámetros startkey=["el"]&endkey=["el",{}]&group_level=2&reduce=true

Esto obtendrá todos los pares de palabras que empiecen por "el", agrupará los pares que sean iguales y ejecutará la función de reducción de la vista en cada grupo. Marky utiliza la función de reducción _sum, que sumará los valores que se le den. Ejecutando esto en la base de datos dkatz_ebooks se obtiene:

Valor clave
["el", "#1″] 1
["el", "100″] 1
["el", "2″] 1
["la", "capacidad"] 3
["el", "absoluto"] 1
["la", "respuesta"] 1
["la", "aplicación"] 1
["la", "aplicación"] 1
["el", "área,"] 1
["el", "fondo."] 1

Para elegir la palabra que sale después de "la", elegimos una palabra que le sigue al azar, pero ponderamos nuestra elección en función de la frecuencia con la que aparece el par de palabras en la entrada. Esto significa que damos a "capacidad" una probabilidad de 3/12 o 25% de ser elegida aquí, mientras que el resto de las palabras tienen cada una una probabilidad de 1/12 o 8,3%.

Puesto que al principio de una frase emparejamos la primera palabra con null (por ejemplo: [null, "In"] en el ejemplo anterior), podemos hacer la misma consulta con null para empezar una nueva salida y obtener palabras que probablemente inicien un pensamiento, o un tuit, o lo que fuera nuestra entrada. También tenemos que hacer esto si no tenemos suerte y no obtenemos ninguna palabra candidata de la primera consulta. Esto podría ocurrir si la palabra de la consulta sólo apareciera al final de los textos de entrada que procesamos.

Aplicación Marky

Marky utiliza un simple clojure wrapper construido por la comunidad. Para configurar marky, crea un archivo marky-config.clj y dirígelo a tu cluster de Couchbase Server y a tu cuenta de twitter. Añade algunos datos semilla, cuentas de usuario de twitter o atom feeds y estarás listo para lanzar la aplicación.

{:bucket "por defecto"
:pass ""
:cburl "https://localhost:8091/"
:twitter {:app-key "XXXXXXXXX"
          :app-secret "XXXXXXXXXX"
          :user-token "XXXXXXXX"
          :user-secret "XXXXXXXX"}
:jobs
[:period, :after están en segundos, :ttl está en días.
 {: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 "https://some-domain/rssfeed.php" :period 86400 :ttl 60}]}

He aquí algunos divertidos tweets de Marky -

¿Quieres conseguir a Marky?

Puede descargar el código fuente de Marky aquí
También puede contribuir al proyecto clojure wrapper aquí

¡Diviértete!

—-

Gracias a Aaron por elaborar el código en clojure.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Jennifer García

Jennifer Garcia es Gerente Senior de Web en Couchbase Inc. Como responsable del sitio web, Jennifer tiene la responsabilidad general de las propiedades del sitio web, incluido el diseño, la implementación, el contenido y el rendimiento.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.