Análisis de los sentimientos en twitter con el soporte de Apicultur.
0. Índice de contenidos.
- 1. Introducción.
- 2. Creación de una cuenta.
- 3. Haciendo uso del API.
- 4. Ejemplo práctico.
- 5. Referencias.
- 6. Conclusiones.
1. Introducción
Apicultur es una plataforma de APIs, desarrollada por
Molino de Ideas
con la solución
Api Manager de WSO2, que proporciona servicios de análisis linguísticos de textos en distintos idiomas.
Haciendo uso de las APIs de Apicultur podremos conjugar verbos a partir de un infinitivo, obtener la raíz semántica de un término, realizar un análisis morfológico,…
y una serie de operaciones, out of the box, sobre el contenido textual de nuestras aplicaciones. Podéis ver numerosos ejemplos de uso de las APIs en el laboratorio del Molino.
En este tutorial vamos a ver cómo registrarnos en la plataforma y hacer uso de una de las APIs del mismo.
El servicio que proporciona Apicultur es de pago, pero tiene un límite gratuito mensual de 20 € que equivale a 100.000 llamadas al mes; o el doble si tu proyecto no tiene ánimo comercial.
2. Creación de una cuenta.
Lo primero es acceder a la tienda de las APIs, cuya interfaz es la siguiente.
En la parte superior derecha pulsamos sobre Sign-up y se mostrará un diálogo como el que sigue:
Introducimos un usuario, contraseña y confirmación de la misma (siguiendo las recomendaciones en cuanto a seguridad).
Tendremos este diálogo de confirmación que nos permite:
<7/p>
- mantenernos donde estamos pulsando «cancel» o
- acceder al diálogo de login pulsando sobre «login»
Introducimos el usuario y contraseña anteriores en el diálogo y ya podremos comenzar a hacer uso, en modo demo, de las APIs.
Vamos a probar el API de «Análisis de sentimientos», una funcionalidad más que curiosa, orientada a twitter que admite como parámetro hasta 140 caracteres textuales y
devuelve la positividad, neutralidad o negatividad del mismo. El objetivo es poder realizar un análisis de las opiniones sobre un hashtag vertido en la red social.
Podéis ver un ejemplo del funcionamiento en la aplicación Mr. Tuit.
Seleccionamos la función del API y se mostrará una interfaz como la que sigue
Desde la cuál deberíamos crear una nueva aplicación. Una aplicación es una unidad lógica de agrupación de APIs. Pulsamos «Applications» > «New application» y se mostrará una interfaz como la que sigue.
Asignamos un nombre y pulsamos sobre añadir
Y se mostrará un diálogo que nos permite:
- mantenernos donde estamos pulsando «No» o
- volver al detalle del API pulsando «Yes».
Una vez hecho esto, podemos acceder a la lista de funciones y realizar nuestras primeras pruebas del API.
Pulsando sobre «List Operations» >»GET» tendremos un formulario con el único parámetro de entrada con la posibilidad de ejecutar una llamada «Try it out!».
Podemos observar la URL a la que se invoca, los parámetros y la respuesta en formato json:
- Vemos que el texto que analiza no es exactamente el mismo puesto debe estar pasando un filtro de
stop words - devuelve un valor entre 0 y 5 indicando la intensidad de la opinión y la certeza del resultado, y
- devuelve una clave de ponderación como resultado del análisis de sentimiento.
Para poder hacer uso del API desde nuestras aplicaciones, debemos seleccionar un plan de uso en función de la frecuencia de
peticiones que estimemos que debe soportar y seleccionando la aplicación que creamos con anterioridad.
Tras la subscripción nos mostrará un diálogo de confirmación que nos permite:
- mantenernos donde estamos pulsando «Stay on this page» o
- acceder a la página de subscripciones pulsando «Go to My Subscriptions».
Desde esta interfaz podemos generar las claves que nos permitirán hacer uso del API, con el soporte del estandar OAuth2.
3. Haciendo uso del API.
Para realizar una prueba rápida podemos ejecutar el siguiente comando desde el terminal:
$ curl -v -H "Authorization: Bearer 123456789_AQUI_TU_CLAVE" http://store.apicultur.com/api//stmtlk/1.0.0/valoracion/tweet/10/a%20mi%20me%20gusta%20el%20pirinpinpin
Y deberíamos tener una salida como la siguiente:
* About to connect() to store.apicultur.com port 80 (#0) * Trying 146.255.185.24... connected * Connected to store.apicultur.com (146.255.185.24) port 80 (#0) > GET /api//stmtlk/1.0.0/valoracion/tweet/10/a%20mi%20me%20gusta%20el%20pinribipinpin HTTP/1.1 > User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5 > Host: store.apicultur.com > Accept: */* > Authorization: Bearer 123456789_AQUI_TU_CLAVE > < HTTP/1.1 200 OK < Date: Tue, 26 Mar 2013 09:40:24 GMT < Server: Synapse-HttpComponents-NIO < Content-Type: application/json < Access-Control-Allow-Headers: Authorization, Content-Type, Accept, X-APIhub-UserId < Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS < Access-Control-Allow-Origin: * < Cache-Control: max-age=0 < Expires: Tue, 26 Mar 2013 09:40:32 GMT < Via: 1.1 store.apicultur.com < Transfer-Encoding: chunked < * Connection #0 to host store.apicultur.com left intact * Closing connection #0 {"intensidad":4,"certidumbre":4,"ponderacion":"POSITIVA","texto":"gusta pirinpinpin"}
Ahora solo debemos disponer de un mecanismo de autenticación en nuestra aplicación que sea capaz de negociar el acceso haciendo uso de dicha clave.
4. Ejemplo práctico.
Vamos a hacer un pequeño ejemplo en el que, por un lado:
- haremos uso de la API pública de Twitter para realizar una búsqueda de tuits por texto; usaremos la versión 1.0 que no necesita autenticación y está marcada como depredated, con lo que no se cuándo dejará de funcionar, pero me sirve para probar rápidamente el API de Apicultur, y por otro
- el propio API de sentimiento de Apicultur para realizar una valoración de los tuits y
un promedio de su valoración.
Primero el resultado:
La implementación ha sido relativamente sencilla puesto que, por un lado se basa en una función javascript que
invoca a las dos apis REST (la de twitter y de la apicultur) con el soporte de jQuery:
var q = escape($('#hashtag').val()); $('#resultadosContainer').empty(); $('#resultados').css('display','block'); $.getJSON( 'http://search.twitter.com/search.json?callback=?&rpp=10&q=' + q, function(data){ $.each(data.results, function(i, tweet) { if(tweet.text !== undefined) { $('#loading').css('display','block'); var texto = escape(tweet.text); $.ajax({ url: 'mybridge.php', data: {texto: texto}, dataType: 'json', async: false, success: function ( idata ) { var ihtml = "<p>"; var sent_image = "not_found.png"; if( idata.ponderacion && "POSITIVA" == idata.ponderacion) { sent_image = "positivo.png"; positives++; } else if( idata.ponderacion && "NEGATIVA" == idata.ponderacion){ sent_image = "negativo.png"; } ihtml += "<img src='analisisSentimientosTwitterApicultur/"+sent_image+"' />"; ihtml += " "; ihtml += tweet.text; ihtml += "<p>"; $(ihtml).appendTo('#resultadosContainer'); } }); $('#loading').css('display','none'); } });
Por otro lado, hemos creado un php que nos hace de puente para realizar una petición con autorización a Apicultur;
el objetivo de ello no ha sido más que no exponer en el javascript nuestra clave de producto. El contenido de mybridge.php es el siguiente:
<?php $access_key = "123456789_AQUI_TU_CLAVE"; $request = curl_init(); $curl = 'https://store.apicultur.com/api//stmtlk/1.0.0/valoracion/tweet/10/' . rawurlencode($_GET["texto"]); curl_setopt($request, CURLOPT_SSLVERSION, 3); curl_setopt($request, CURLOPT_URL, $curl); curl_setopt($request, CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$access_key)); curl_setopt($request, CURLOPT_RETURNTRANSFER, true); echo curl_exec($request); curl_close($request); ?>
5. Referencias.
- http://www.apicultur.com/
- https://store.apicultur.com/
- http://wso2.com/products/api-manager
- http://www.mrtuit.com/
- Algunas imágenes by Yusuke Kamiyamanehttp://p.yusukekamiyamane.com/
- Algunas imágenes by Everaldo Coelho – http://www.everaldo.com/
6. Conclusiones.
Buena documentacíon y un uso muy simple; sobre todo si estamos familiarizados con REST; Apicultur es una plataforma muy a tener en cuenta!
El API de sentimiento, pasa de ser simpático a bastante potente si tenemos en cuenta el uso cada vez más masivo
que hacemos de twitter, pudiéndose convertir en un medidor del índice de opinión bastante interesante.
Un saludo.
Jose
Muy interesante. Yo hice una extensión chrome para viralheat.com con su sentiment API.
Por si alguien está interesado se puede usar gratis pero sólo funciona en inglés:
https://app.viralheat.com/developer/sentiment
Y la extensión que inserta en facebook,twitter y google plus un emoticono indicando si el mensaje es positivo,negativo o neutral:
https://chrome.google.com/webstore/detail/viralheat-social-sentimen/nhbdpadfkcajamoljjdfcifojmlhpfoj
Lo pongo por si alguien tiene curiosidad en ver qué tal va esta API espero que no lo considereis spam. Aunque ya avanzo que el resultado es un poco irregular, no sé en qué porcentaje acierta pero no creo que sea muy elevado (es un tema muy complicado el análisis de sentimiento), sobre todo sirve para hacerse una idea con los resultados totales sobre muchos tweets. Si hay un porcentaje alto de positivos o negativos sí que puede ser un buen indicativo.
Saludos!
Oscar
Estás en lo cierto Oscar, el tema del análisis de sentimiento es muy complicado, más aún en español, si me permites decirlo.
Lo bueno de aplicar APIs que estén bien gestionadas, es que el motor interno está continuamente mejorando, beneficiándose automáticamente todos los usuarios que la implementan sin necesidad de nuevas compilaciones, versiones, etc.