Análisis de Discursos con Wordcloud en Python

Los discursos políticos o de cualquier índole suelen ser generalmente largos, complicados y retóricos, por ello, podemos utilizar el poder de de la tecnología del Siglo XXI, es decir, el de las computadoras y sus lenguajes de programación, que en este caso, será python, con la finalidad de extraer esas palabras claves que nos ayuden a determinar la idea principal y secundaria de n cantidad de discursos, teniendo como objetivo fundamental, el entendimiento y el contraste de todos ellos, ahorrándonos tiempo y esfuerzo.

Para ello, utilizaremos los discursos de toma de posesión de dos presidentes controversiales de América Latina (¡ y que controversiales !), además, de la técnica de minería de texto que nos permitirá contar el número total de cada palabra utilizada en dichos discursos, lo cual, indicará de manera gráfica la dirección y el sentido de las ideas que se quisieron comunicar, mediante unos textos que representan una copia fiel de la alocución de cada personalidad, con un promedio de: 7.720 palabras, que se pueden escribir perfectamente en 17 hojas blancas tipo carta.

¡ Vamos a comenzar ! :
Primero, descarguemos los archivos que contienen los discursos de estas dos personalidades en formato .txt, para que las salidas de su algoritmo sea igual a los gráficos presentados, sin embargo, pueden utilizar otros, así como, modificar el código para poder contrastar la cantidad de discursos que quieran.

Discurso 1

Discurso 2

Ahora bien, comenzaremos con el código en python.

Importamos las bibliotecas necesarias para correr el código, la mayoría de ellas utilizadas en el text mining.

import pandas as pd 
import matplotlib.pyplot as plt
import nltk
from nltk.corpus import stopwords
from wordcloud import WordCloud

Abrimos los 2 archivos .txt, unicamente para su lectura («r»: read).

f=open("PANC.txt","r")  ### Discurso 1
s=open("PANC1.txt","r") ### Discurso 2

Invocamos la función: read(), sobre las variables que contienen los dos archivos, para comenzar a leer el texto escrito.

data = f.read()
data1 = s.read()

Seleccionamos la primera linea del archivo .txt (first_line), en la cual, siempre debemos colocar el título del texto que deseamos analizar, para ello, utilizamos la función: split() con el parámetro: ‘\n’, que indica que esta parte del código, tomará las palabras que se encuentren hasta antes del salto de linea.

Así mismo, vale la pena recordar que, por defecto, python comienza a enumerar registros desde el número 0 hasta n-1, por lo que, comenzamos por el 0.

Con la variable: second_line, extraemos el autor del articulo, y repetimos el mismo procedimiento para el segundo artículo.

first_line = data.split('\n')[0]
second_line = data.split('\n')[1]

first_line1 = data1.split('\n')[0]
second_line1 = data1.split('\n')[1]

Construimos un dataframe, con las siguientes columnas: Nombre del Discurso, con el titulo del articulo, Autor, donde estará el nombre del escritor y, cuerpo, con los párrafos pertenecientes a cada texto.

datos={  "Nombre del Discurso": [first_line,first_line1 ]
        ,"Autor":               [second_line,second_line1]
        ,"Cuerpo":              [data,data1]   
            }

Tablero=pd.DataFrame(datos) 
Tablero.head() 

Invocamos la función: stopwords, de la libreria:nltk, con el propósito de eliminar todas las palabras que impliquen conectivos, como por ejemplo: Los, las, el, la, etc., que no aporten información a nuestro análisis.

stop_words_sp = set(stopwords.words('spanish'))

Definimos la función:generateWordCloud, con dos parametros: data y title, donde: data es el campo: Cuerpo, de nuestro dataframe y, title es el campo: Nombre del discurso.

def generateWordCloud(data,title):
    wordcloud = WordCloud(background_color='white',
        stopwords=stop_words_sp,
        max_words=20,
        max_font_size=200, 
        scale=3,
        random_state=3).generate(str(data))


wordcloud.recolor(random_state=1)
plt.figure(figsize=(20, 15))
plt.title(title, fontsize=20,color='blue')
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

En el interior de la función: generateWordCloud, se encuentra la función: WordCloud, de la librería del mismo nombre, cuyos parametros definiran la salida final de nuestro algoritmo, así pues, background_color, definira el color del fondo de nuestra nube de palabras.

stopwords, eliminara todas esas palabras en español como conectivos, pronombres, entre otras que no aportan información a nuestro análisis.

max_words, servirá para controlar el número de palabras que aparecerán en la nube.

max_font_size, controlaremos el tamaño máximo de las letras de las palabras.

random_state, nos ubicara de forma aleatoria en nuestra foto final las palabras claves del discurso.

Asi mismo, tenemos otras sentencias como: plt.title(title, fontsize=20,color=’blue’), que nos ayudará a darle formato al gráfico con el analisis de los articulos a formar.

for cols in Tablero.index:
  generateWordCloud(Tablero.loc[cols,'Cuerpo'],Tablero.loc[cols,'Nombre 
  del Discurso'])

Con un for recorremos el dataframe y pasaremos los campos necesarios para obtener los datos de cada articulo que transformaremos en información.

Finalmente, luego de correr todo el algoritmo, podemos ver como se despliegan los gráficos que nos indican la palabras que enmarcan los discursos de cada personaje con su respectivo título, lo que permite concluir el propósito y esencia del mensaje.

Todo esto, por su puesto, con un background de información de los temas vinculados y tratados por dichos personajes.