top of page
Search

Procesamiento de Lenguaje Natural Básico aplicado a un fragmento del libro Patria

  • Writer: Antonio Romero Camacho
    Antonio Romero Camacho
  • Sep 20, 2020
  • 4 min read

Updated: Feb 14, 2021

El próximo 27 de Septiembre se estrena en la plataforma HBO la adaptación de una novela de Fernando Aramburu (Patria) que actualmente estoy leyendo. Me queda 1/3 para terminarlo y hasta el momento, y sin hacer ningún spoiler, me parece un must-read de una narrativa excelente, dinámica y fresca. Uno de los aspectos que más me está gustando es esa forma de describir un hecho histórico reciente mediante la vida y obra de personajes normales/creíbles con los que es fácil identificarte.

Figura 1. Cartel publicitario de la serie Patria de HBO

En este post quiero compartir unas nociones básicas sobre Procesamiento de Lenguaje Natural (NLP) que iré ampliando en sucesivas entradas. Estas nociones se acompañaran de ejemplos con código en Python. Para ello utilizaremos la librería Natural Language ToolKit (NLTK) y realizaremos algunos ejemplos básicos que demuestren la utilidad de la librería para tareas relacionadas con el procesamiento del lenguaje.


Características de la biblioteca Natural Language Toolkit (NLTK)


1. Abrir el archivo de texto a analizar

En primer lugar mostramos cómo abrir y leer el archivo que queremos analizar.

Figura 2. Código Python para abrir y leer el archivo de texto a analizar

2. Importar las bibliotecas

Para algunos procesamientos de lenguaje natural de datos, es necesario importar ciertas bibliotecas. En este caso, la librería a utilizar en NLTK para realizar Procesamiento de Lenguaje Natural. A continuación, veremos algunas de las tareas de procesamiento que se pueden llevar a cabo.

Figura 3. Importar las librerías necesarias

3. Tokenización de frases

Usando el comando sent_tokenize( ), podemos obtener el texto expresado como una lista de frases en Python.

Figura 4. Uso del comando sent_tokenize( ) para dividir el texto por frases

En este ejemplo, vemos que el texto puede dividirse en 431 frases.


4. Tokenización de palabras

Usando el comando word_tokenize( ), podemos obtener el texto expresado como una lista de palabras en Python.

Figura 5. Usando word_tokenize( ) para dividir el texto por palabras

En este ejemplo, vemos que el texto puede dividirse en 6556 palabras.


5. Distribución en frecuencia

De la siguiente forma, es posible calcular la frecuencia de repetición de cada una de las palabras del texto.

Figura 6. Cálculo de los pares palabra-frecuencia para el texto de análisis

Se han mostrado las 20 palabras más repetidas en el fragmento de texto extraído de la novela. Podemos observar que la mayoría de estas palabras son signos de puntuación y stopwords (palabras vacías). En las siguientes secciones se mostrará cómo eliminar los signos de puntuación y las stopwords para no tenerlas en cuenta en el análisis de lenguaje.


6. Representación gráfica de la frecuencia por palabra

Haciendo uso de la biblioteca matplotlib, se puede representar gráficamente la frecuencia de repetición de las palabras más repetidas en el texto.

Figura 7. Gráfica para mostrar la distribución de frecuencias del texto por palabras

La gráfica de la Figura 7 muestra que la coma y el punto son empleadas 407 y 397 veces respectivamente. Desde un punto de vista puramente analítico, los signos de puntuación no son relevantes para el procesamiento de lenguaje natural. Es por esto, que se mostrará cómo dejarlos a un lado durante el análisis.


7. Eliminar los signos de puntuación

En este paso mostramos una manera sencilla de eliminar los signos de puntuación. EL código evalúa si cada token es una palabra o signo de puntuación mediante el comando isalpha( ). Finalmente, almacena en una lista (inicialmente vacía) los tokens que son palabras.

Figura 8. Texto separado en palabras sin signos de puntuación

Al eliminar los signos de puntuación, el número de palabras se ha reducido a 5454.


La nueva distribución de frecuencia de las palabras (excluyendo los signos de puntuación) se muestra en la Figura 9.

Figura 9. Distribución en frecuencia de palabras de la variable palabras_no_punt

En el Top 20 las palabras que tenemos son vacías. Es por esto que procedemos a eliminarlas en los siguientes apartados.


8. Lista de stopwords

Mediante el siguiente código, construimos una lista de stopwords que utilizaremos a modo de filtro en la siguiente sección.

Figura 10. Importar la lista de stopwords en Castellano

9. Eliminar las stopwords

Para eliminar las stopwords, se comparan las palabras resultantes de eliminar los signos de puntuación con las contenidas en la lista de stopwords sw. En caso de que la palabra no esté contenida en la lista sw, se incluye automáticamente en la lista palabras_limpias.

Figura 11. Resultado de eliminar las stopwords presentes en el texto

El nuevo Top 20 de palabras más repetidas se muestra en la Figura 12. El nuevo gráfico representa palabras que tienen un significado y que cualquier lector de la novela De Aramburu encontrará llenas de significado. Por ejemplo, dentro de las 6 palabras más repetidas en el fragmento de novela seleccionado encontramos los nombres de la familia protagonista de la novela: Txato, Bittori, Xavier y Nerea.

Figura 12. Distribución en frecuencia de palabras de la variable palabras_limpias

10. Generación de una nube de palabras

Las nubes de palabras o word clouds son una técnica de visualización que muestra las palabras contenidas en un texto. Éste método muestra la frecuencia con la que aparece una palabra en un cuerpo de texto dado, haciendo que el tamaño de cada palabra sea proporcional a su frecuencia. Todas las palabras se disponen en un grupo o nube de palabras. De manera alternativa, las palabras también se pueden organizar en cualquier formato: líneas horizontales, columnas o dentro de una forma.


Figura 13. Word Cloud del fragmento de texto extraído de la novela Patria

Las nubes de palabras son excelentes herramientas para mostrar información de un vistazo pero sin embargo no son buenas para la exactitud analítica. Generalmente se utilizan más por razones estéticas.


Conclusión

En este artículo hemos aprendido través de código Python sobre cómo realizar análisis de frecuencias muy básicos en textos, a través de la biblioteca NLTK. En próximas publicaciones continuaremos adentrándonos más en el mundo del Procesamiento del Lenguaje Natural y analizaremos problemas más complejos como por ejemplo, el análisis de sentimientos. Espero que os haya resultado interesante y mientras tanto, espero vuestros comentarios.

 
 
 

Comentarios


bottom of page