[vc_row][vc_column][vc_column_text]Este artículo es sobre como utilizar Python para aplicar técnicas básicas de NLP (natural language processing)  sobre tweets.

Para el ejemplo vamos a utilizar los tweets de Nidhi Razdan, Rupa Subramanya, Shubhrastha y Rana Ayyub. Usted puede utilizar para su ejemplo cualquier usuario de Twitter.

El análisis tiene un propósito limitado: se trata de poner un conjunto de números alrededor de los tweets, como obtener una visión cuantificada básica de los tweets de estos periodistas.

Con relación a NLP, se aplican las siguiente técnicas:

  • Densidad de palabras: Esta es simple, calcula el número de palabras por tweet
  • Diversidad léxica: Esta es una estadística interesante, la cual es explicada por el autor Russel en Mining the Social Web.

Diversidad Léxica esta definida como el número de palabras únicas dividida por el número de palabras totales; por definición, una diversidad léxica de 1.0 significa que todas las palabras en el texto son únicas, mientras que una diversidad léxica que se acerca a 0.0 implica más palabras repetidas. En el entorno de Twitter, la diversidad léxica podría interpretarse de manera similar si se comparan dos usuarios de Twitter, pero también podría sugerir mucho sobre la diversidad relativa del contenido general que se discute, como podría se el caso de alguien que habla solo de tecnología versus alguien que habla sobre una gama mucho más amplia.

  • Palabras principales: Las palabras principales son las palabras más utilizadas. El programa imprime las 5 principales.
  • Popularidad: La suma de los número de retweets y likes recibidos por un tweet. El programa imprime las 5 principales.
  • Sentimiento: Una pieza de texto puede clasificarse como positiva, neutra y negativa. El programa calcula el número y el porcentaje de tweets positivos, negativos y neutros.
  • Agrupamiento: Agrupamiento es una forma de dividir un grupo de entidades en un número fijo de grupos que no se determinaron previamente y se forman orgánicamente a medida que se procesan los datos. Utilicé el algoritmo de agrupamiento k-means, que es un algoritmo de Machine Learning no supervisado que divide n puntos de datos en K clusters en función de cierta medida de similitud. El programa utiliza k=5, por lo que divide los tweets en cinco clusters (temas) e imprime diez palabras de cada grupo como un ejemplo indicativo.

[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]El código esta escrito en Python. El programa tiene funciones de ayuda que son utilizadas por las rutinas más funcionales:

  • clean_text_and_tokenize: Esta función toma una linea (cadena) como entrada, la limpia y devuelve las palabras como una lista. El proceso de limpiado consiste en: eliminar los enlaces, la puntuación, eliminar las denominadas stop words y lematización de las palabras restantes. Las stop words son palabras como «a» y que no queremos analizar. Lemmatizar es el proceso de reemplazar una palabra por su palabra base.
  • clean_tweet: Esta función toma una línea (cadena), obtiene las palabras ya procesadas mediante clean_text_and_tokenize y retorna un texto reuniendo las palabras procesadas.
  • getCleanedWords: Esta función toma una lista de líneas (cadenas), las limpia y retorna todas las palabras de estas líneas.

[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Las principales rutinas funcionales son:

  • lexical_diversity: Esta función toma una lista de palabras y devuelve un número de palabras únicas dividida por el número total de palabras.
  • average_words: Esta función toma un arreglo de cadenas, las divide en palabras, y devuelve palabras por valor de cadena.
  • top_words: Esta función toma una lista de palabras, almacena la frecuencia de estas palabras y devuelve las palabras más utilizadas. Si no se pasa un número como argumento, entrega por defecto las 5 principales.
  • popular_tweets: Esta función toma una lista de palabras, almacena la frecuencia de cada palabra y devuelve las palabras más frecuentes usadas. Si el número no se pasa como argumento, por defecto es cinco.
  • sentiment_analysis_basic: Esta función usa el método de sentimiento de la biblioteca TextBlob para calcular la polaridad de un tweet. El tweet se clasifica como positivo, neutro o negativo según el valor de popularidad que sea mayor, igual o menor que cero.
  • clusterTweetKmeans: Esta función es parte de la librería gensim y crea un modelo de vectores de los tweets ya procesados. Después de entrenar el modelo, esta invoca a la rutina KMeans de la librería sklearn. Los tweets son agrupados en seis tópicos.

El código esta disponible en el repositorio GitHub python-misc. La entrada del programa es un archivo con el nombre <twitter_user>.csv. Este archivo ha sido generado ejecutando el programa Exporter.py disponible en el repositorio GitHub GetOldTweets-python. La característica más interesante de este módulo es que no tiene que registrar una aplicación en Twitter.com y utilizar los tokens de autorización y contraseñas de código.

Para este artículo, revisamos los tweets desde 01-Enero-2015 a 25-septiembre-2017. Para obtener los tweets de @Nidhi en un archivo CVS.

Exporter.py genera un archivo output_got.csv, el cual es renombrado por Nidhi.csv. El programa para ejecutar el segundo programa es:

El programa abre el archivo CSV y lee todos los registros en una lista de cadena. Se saltea la primera línea ya que es el encabezado. Luego llama a las rutinas funcionales una a una. La salida generada para ejecutar con Nidhi.csv es:

Impresión de los 5 tweets principales:

Pueden ver la salida del análisis de las cuatro twitteras en Google Sheet.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Mejoras al programa

Para el calculo de la diversidad léxica, quizás se debería utilizar la misma cantidad de tweets. El análisis de sentimiento se puede hacer con un algoritmo más avanzado como Naive Bayes; esto requeriría un corpus de tweets pre-clasificados, los datos de entrenamiento, como técnicamente se llama, preferiblemente de usuarios de la misma región.

Una vez que se tenga un conjunto de datos más grande de análisis de Twitter, este programa podría usarse para clasificar la orientación política de un usuario de Twitter, como izquierda, centro o derecha mediante el análisis de sus tweets. Esto podría hacerse comparando sus tweets con un corpus de ideología política o midiendo similitudes con uno de los usuarios de Twitter ya analizados.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Observaciones a los proyectos y al código de ellos

Al ejecutar los ejemplos, se realizaron cambios y actualizaciones a los mismos a fin de que el programa funcionara, esto principalmente por que Python es un lenguaje que continuamente se esta actualizando y hay sentencias que cambiaron desde la creación del proyecto.

Puede descargar nuestra versión del código en el repositorio de GitHub TweetNLP. Para ejecutar el mismo se utilizo Python v 3.6 y el IDE PyCharm.

Los cambios realizados fueron:

1. Del proyecto GetOldTweets-python, se modifico el archivo got3/manager/TweetManager.py

El código se modifico por:

2. En el proyecto python-misc se modifico el archivo twitter/tweets-analysis.py

Se presentaban warnings debido a gensim y con la línea de código agregada se omitieron estos warnings.

3. En el proyecto python-misc se modifico el archivo twitter/tweets-analysis.py, exactamente la función fetchTweetsFromFile, a fin de poder leer el archivo donde estaban los tweets.

Se modifico la apertura del archivo:

Se debe considerar que se deben importar las librerías que utiliza el proyecto para que este funcione, algunas de ellas son:

  • lxml
  • pyquery
  • nltk
  • gensim
  • prettytable
  • textblob
  • sklearn

Este artículo se encuentra basado en Applying NLP to Tweets With Python[/vc_column_text][/vc_column][/vc_row]

Aplicación de NLP a tweets con Python
Si te gusto, comparte ...Share on email
Email
Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
Linkedin
Share on google
Google
Etiquetado en:        

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook