miércoles, 28 de marzo de 2012

Cristalab

Cristalab

Cristalab


Sistemas y herramientas para visualizar y extraer datos de Twitter

Posted: 28 Mar 2012 01:45 AM PDT

En Twitter se publican muchas cosas, desde las opiniones sobre la polémica política del momento hasta actualizaciones con relación a la vida íntima. Según [1] la taza de publicación de tweets, durante la transmisión del super tazón, fue de 10.000 tweets por segundo.

Y por qué habría de resultar esto interesante?


Cuánto nos tardaría leer sólo lo publicado en 1 segundo (10.000 tweets), y cuánto nos tardaríamos en encontrar información de interés entre esos 10.000 tweets?

Sí, muchísimo tiempo!

Ahora imaginemos que no sólo queremos los 10.000 tweets, si no que deseamos tener una idea general de lo que se está comentando…leerías todo? y como encontrarías la relación de los tweets entre sí?

La Extracción de información es una tarea que consiste en:

  • de gran cantidad (hablo de gigas o teras) de información (en formato texto)
  • extraer una lista con información que sea de interés.


A partir de esas listas de eventos, ítems o información, se pueden hacer otros tipos de procesamientos más interesantes, por ejemplo, análisis de sentimientos para intentar determinar la opinión general sobre cierto tema en particular.


Corpus


A la gran cantidad de información se le llama corpus, un corpus es simplemente una colección de texto, por ejemplo podríamos guardar todos los tweets publicados durante el super tazón, y a esa colección de tweets la podríamos llamar "corpus de tweets publicados durante el super tazón".

Voy a intentar aclarar un poco más en qué consiste la extracción de información. Supongamos que hemos recolectado un corpus sobre videojuegos, que está compuesto de artículos de revistas sobre videojuegos, entradas de blog, de foros etc..

Ahora queremos generar, a partir de ese corpus, una lista con la siguiente información:

NombreVideoJuego - Compañía - FechaDeSalida


Supongamos que en nuestro corpus existe una frase que diga algo como:

:

" Square Enix ya está trabajando en Final Fantasy X"


La extracción agregaría el siguiente registro a nuestra lista:


  • NombreVideoJuego: "Final Fantasy X"
  • Compañía:"Square Enix"
  • FechaDeSalida: "null"


El resultado final, debería ser una tabla llena con todos los videojuegos y la respectiva compañía desarrolladora. Sin embargo, existen retos, muchos retos. Uno de ellos, por ejemplo, consiste en que alguien puede escribir "Final Fantasy X" o puede referirse al mismo juego escribiendo "FFX". De hecho, si hablamos de juegos, a los gamers les encanta usar acrónimos, y podríamos tener casos en los que dos juegos diferentes tengan acrónimos iguales.


Experimento


Algunas semanas atrás, leí una entrada sobre Extracción y Visualización de Información en Twitter [2], aunque el experimento resultaba bastante sencillo, y la extracción es bastante ingenua, me pareció un reto interesante para el fin de semana.

Corrí mi implementación sobre algunos trends de Colombia, y sobre tweets relacionados con Cristalab, aquí les dejo algunas imágenes.

[nota:45df40fbde]click en las imagenes para agrandar[/nota:45df40fbde]

El tema en la imagen es "cartoons", y se ven las ramificaciones sobre los diferentes cartoons:


El tema en la imagen es "qué aman las mujeres":


El tema principal en la imagen es "la liberación de secuestrados en colombia":


Sobre los "tweets de cristalab en marzo":




Básicamente, la imagen es un árbol donde cada nodo representa una palabra, dos palabras se relacionan entre sí si existieron tweets en los cuales las cuales las palabras se usaron.

Los nodos adyacentes a cada palabra representan tweets que incluyeron los términos de la raíz hasta el nodo.

Las "estrellas" en el árbol representan los temas más populares.


Intentaré explicar algunos de los pasos y la idea en general:



En resumen:

  1. capturar tweets
  2. limpiar tweets

    • Corrección de cadenas
    • Quitar Símbolos, caracteres extraños
    • POS tagger de los tweets
    • Reconocimiento de nombres

  3. limpieza final
  4. Conteo y frecuencia de palabras
  5. representación en grafo



Selección de Tweets


El primer paso es construir el corpus que necesitamos, y para eso podemos usar el API de Twitter. En el API de twitter podemos hacer búsquedas de tweets con respecto a un radio geográfico o también por palabras.

Sobre el corpus generado hay que dejar claro que es un corpus lleno de basura.
Sí! basura, necesitamos limpiarlo, de muchas formas. Pueden haber tweets que no nos sirvan o que simplemente tengan errores de escritura.


Pre-procesamiento


Cosas que usualmente se hacen en el pre-procesamiento o limpieza:


  • transformar palabras como: 'muuuuuuuuuuuuuuuy' a 'muy'.
  • encontrar posibles errores de escritura, por ejemplo: 'encontrar' 'necontrar'..
  • quitar URLS, emails y símbolos que consideremos extraños.


Similitud de Cadenas


Este tipo de limpieza implica por ejemplo medir similitud de cadenas. La similitud consiste en si tienes dos strings A y B, identificar qué tan parecidos o diferentes son.

Sólo el tema de similitud de cadenas puede ser un tutorial completo. En general existen diferentes estrategias para medir la similitud de cadenas, entre los más conocidos están Jaro, Jaro-Winkler, Soundex y Levenstein.

La más conocida es Levenstein, pero a nivel personal no me agrada mucho por dos razones, primero la comparación de cadenas no es normalizada, es decir, el número que arroja depende del largo de las cadenas. Mientras Jaro y Jaro-Winkler son normalizadas, sin importar el largo, si las cadenas son completamente iguales, el resultado es 1.

Una de mis favoritas es Soundex, que mide la similitud entre cadenas en base a la fonética, por ejemplo las palabras "rupert" y "robert" serían muy parecidas, dado que fonéticamente son similares. De hecho el pre-procesamiento usualmente incluye también NLP, dependiendo de lo que deseamos realizar.

Lo que ocurre usualmente es que deseamos anotar nuestros datos con información extra. En este caso el resultado final será un grafo conectando las palabras clave, así que necesitaba incluir en la limpieza una forma de evitar ramificaciones adicionales por ejemplo:

Si los tweets extraídos hablaban sobre el tema "liberación de secuestrados", tendremos tweets donde se mencionará: "liberacion", "liberaran", "liberaron", "liberarian", dado que el español es un idioma con bastantes declinaciones, terminaríamos con un árbol con muchas ramas, todas refiriéndose en esencia al mismo verbo "liberar". Otro ejemplo podría ser con los plurales y singulares. Una forma de evitar este tipo de problemas es usando un POS-tagger.



POS Tagger


POS-tagger (Part of Speech Tagger) es una herramienta cuya entrada es texto, y la salida es texto anotado. A cada palabra le va asignada su función dentro de la oración. Por ejemplo si la oración es:

:

'Juan visita Alemania'

Entonces la salida será algo como:


  • Juan - Sustantivo
  • Visita -Verbo Transitivo - tiempo: presente- Infinitivo: Visitar
  • Alemania - Sustantivo


Existen POS-taggers ya entrenados para ciertos idiomas, entre ellos el español. Dependiendo de la herramienta podría arrojarnos información adicional, por ejemplo si el sustantivo es plural o singular.

El pos-tagger también nos ayuda a limpiar palabras que no tengan significado por sí mismas. Por ejemplo, podemos limpiar posteriormente todas las palabras que sean preposiciones.

StopWords


Existen palabras que no tienen significado por sí mismas y otras que sí lo tienen pero que resultan muy comunes. Estas palabras se llaman stopwords. En la visualización del grafo quería evitar este tipo de palabras, ya que resultan ser basura (no en todos los casos lo son). Existen utilidades que ya traen una lista de Stopwords para español. Por ejemplo la librería nltk en python ya trae una lista de stopwords para español.

Reconocimiento de Entidades


Es también una herramienta a partir de la cual se reconocen nombres propios, lugares y fechas. No es un diccionario, eso quiere decir que no es una lista definida de nombres, es una herramienta entrenada usando técnicas de inteligencia artificial para reconocer nombres propios.

Existen herramientas especializadas para la detección de nombres en dominios particulares. El reconocimiento de nombres propios se resume en 2 tareas:

  • Reconocer nombres propios dentro de texto
  • Desambiguación de nombres.


La desambiguación se refiere por ejemplo a que pueden existir múltiples formas de nombrar a una misma entidad. Si habláramos de "Barack Obama", en los tweets se pueden referir al mismo personaje de muchas formas: "Obama", "B. Obama", "Barack O.", "El presidente de estados unidos"...

La segunda tarea puede ser muy complicada, sin embargo la primera es relativamente un problema resuelto.

Lo que hice para este extractor ingenuo fue simplemente usar una herramienta ya entrenada para reconocimiento de nombres pero no para la desambiguación. Quería mantener dentro de las palabras claves dibujadas dentro del grafo, aquellos nombres propios y lugares que tuvieran cierta frecuencia dentro del corpus de tweets.


Limpieza final


La última limpieza consiste en reemplazar todas las conjugaciones de verbos por infinitivos y todos los plurales por singulares. Si esta limpieza se hace antes, el reconocimiento de nombres y el POS tagger no funcionarán adecuadamente.

Estando el corpus ya limpio, se procede a crear una tabla de frecuencias, es decir, vamos a contar cuántas veces está cada palabra dentro del corpus, de esas palabras seleccionaremos aquellas que tengan una frecuencia más alta, y a partir de ellas, vamos a empezar a crear el grafo.


Representación del grafo


Para la visualización se usó la herramienta gource [3]. Básicamente los que hice fue iterar sobre la lista de tweets. Sobre cada tweet preguntaba en orden descendente con respecto a la frecuencia si la palabra se encontraba dentro del tweet.

Supongamos que nuestra lista de frecuencias era algo como:

    palabra - frecuencia
    "secuestro" - 400
    "liberacion" - 300
    "violencia" - 30


Así, si un tweet contiene las palabras "secuestro" y "liberación", existirá una arista conectando "secuestro" y "liberacion" y, finalmente, "liberacion" tendrá una arista a un nodo que será la representación del tweet.


Para terminar


Esto fue sólo un experimento de fin de semana y la extracción de información usualmente tiene muchos retos. El objetivo de este post es simplemente dar a conocer un poco de qué trata la extracción de información y las herramientas disponibles.

La extracción de información es usada para construir un sistema de preguntas y respuestas que son eficaces para un dominio específico y que al parecer, empieza a ser popular pues algunas compañías están pidiendo sus sistemas automáticos de preguntas y respuestas para sus sitios webs.

Adicionalmente dada la cantidad de información que está siendo generada por los usuarios, muchas compañías están interesadas en aplicar procesamiento del lenguaje natural para saber qué quieren sus clientes o qué opinan sus clientes sobre sus productos. Vale mencionar que también lo están implementando las agencias de seguridad.

Muchas cosas quedaron sin mencionar y aquellas que se mencionaron se podrían mencionar a un nivel más profundo, pero este post ya es suficientemente largo y aburrido así que decidí acortar la idea inicial.

Espero les haya gustado.

@dav009


[1] Tweets per second - http://yearinreview.twitter.com/en/tps.html
[2] http://highwire-dtc.co.uk/2011/05/real-time-twitter-topic-clustering-and-data-visualisation/
[3] http://code.google.com/p/gource/

Enviar comentario

Revisar cambios con Debug en Redes Cisco

Posted: 28 Mar 2012 01:10 AM PDT

En este videotutorial vamos a usar el comando Debug en Redes Cisco, para mantener información en todo momento de los cambios que se producen en nuestros dispositivos, como modificaciones y ajustes de configuración del sistema, que se realizarán en respuesta a la introducción de nuestros comandos y que nos ofrecerán información vital del funcionamiento de determinados procesos de envío de actualizaciones de los protocolos de enrutamiento.



Saludos.

Enviar comentario

HTML5 es más que etiquetas

Posted: 07 Mar 2012 09:01 AM PST

HTML5, CSS3 y Javascript son la nueva columna vertebral de la experiencia de usuario en Internet, acortado como "HTML5", similar a lo que en su tiempo fue la "Web 2.0".

"Web 2.0" es un termino desafortunado. Inventado por O'Reilly y desvirtuado por el marketing, nunca significó nada más allá de "AJAX con usabilidad" y terminó como sinonimo de ignorancia tecnologica.

Ahora tenemos "HTML5". HTML5 es la nueva versión semántica del lenguaje de etiquetas con el que se construye internet. Pero la W3C, el consorcio encargado del estándar, también ha tomado HTML5 como el término sombrilla que engloba las nuevas tecnologías del futuro de la web. A diferencia de "web 2.0", esta vez HTML5 tiene un norte definido, un grupo de empresas y fundaciones apoyando y una visión.



"¡¡Pero HTML5 no es CSS3 y Javascript!!"


HTML5 es un lenguaje de modelado de información por etiquetas. CSS3 es un lenguaje de estilos en cascada. Javascript es un lenguaje de programación. Y todos, todos, se engloban alrededor del concepto HTML5.

Flash es una herramienta vectorial, un formato de animación y un contenedor de Actionscript 3, así como el player de varios formatos de video y del sistema de RIAs Flex.

¿Y saben qué? Sigue llamandose Flash todo eso.

La W3C oficialmente aceptó "HTML5" como el concepto sombrilla, al punto que creo un logo principal y una página de marca explicando claramente que HTML5 es HTML y más que HTML.


Los geeks fanaticos no entienden de marcas


La discusión de que HTML5 no es CSS3 que se dio en Cristalab la semana pasada me recuerda la discusión de si "Linux" es "GNU/Linux" o no. La realidad es que a nadie le importa. Sí es importante definir qué cosa es qué al programar, pero cualquier persona inteligente puede diferenciar el uso de HTML5 en cada contexto.

¿Por qué el odio a usar HTML5 como concepto? No lo sé ¿Elitismo? No encuentro el menor sentido en atacar un concepto que ayuda a entender mejor una nueva tecnología y por extensión a vender más, mejor y más avanzados proyectos a los clientes y usuarios.

El artículo de la semana pasada dice que Web Storage, la capacidad de guardar en disco con Javascript, no es HTML5. Y publica esta URL:
http://dev.w3.org/html5/webstorage/
Donde parte de la URL dice HTML5!!

¿Quieren más ejemplos? Entren a:
http://dev.w3.org/html5/

Donde encontrarán Canvas (Bitmaps Javascript), Device (cámaras, microfonos), Websockets (Mensajes realtime), Web Workers (JS multitarea) entre muchos otros ejemplos bajo HTML5.



"HTML5 estará listo en el 2014"


El último y más famoso recurso de los detractores de HTML5 es que "no está listo". ¿Ustedes creen que HTML5 es un software que una empresa "termina"? HTML5 es un spec vivo, cuya implementación depende de los navegadores y del cual gran parte se puede usar ya mismo sin problemas. Eso incluye CSS3. Es posible usar CSS3 en Internet Explorer viejos. Es posible usar HTML5 desde ya.

El draft HTML5 de la W3C no se cerrará hasta dentro de unos años, pero para entonces nuestros navegadores tendrán nuevas tecnologías, porque no es Flash o Visual Basic, es una tecnología viva que crece con su uso.

Sean profesionales, usen HTML5 y no teman llamarle a las cosas por su marca.

Enviar comentario

Enrutamiento estático en Redes Cisco

Posted: 07 Mar 2012 12:21 AM PST

Después de haber estudiado toda la teoría del sistema de direcciones IPv4, por fin aprenderemos el uso del enrutamiento estático para conectar y generar rutas entre diferentes redes a través de los dispositivos intermedios, trabajando sobre una topología simple que usaremos para configurar todos los pasos y seleccionar los comandos correctos para generar nuestro camino bidireccional en cada segmento de la red y testeándolo finalmente para comprobar la conectividad entre ambos extremos.



Saludos.

Enviar comentario

Diseño web para iPhone

Posted: 28 Jul 2009 05:00 PM PDT

El diseño web en iPhone requiere conocimientos de HTML 5, CSS y Javascript especial para usar todo el poder de Safari Mobile. En este tutorial hablamos de cómo crear sitios web optimizados para iPhone y navegadores Webkit como Android.

No hay comentarios:

Publicar un comentario