Ejercicio de Deep Learning sobre análisis de sentimientos. P2: preprocesado

Autor: | Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

En un artículo anterior iniciamos el desarrollo de un ejercicio de deep learning sobre análisis de sentimientos. Comenzamos haciendo la carga y visualización de los datos.

En este apartado seguiremos con el mismo ejercicio en su fase de preprocesado.

Ejercicio de deep learning: preprocesado

En este ejercicio de deep learning vamos a preprocesar los datos de cara al entrenamiento.

Lo primero que haremos es la eliminación de etiquetas HTML, de palabras extrañas, stopwords y de cualquier ruido que tenga el texto que impida su comprensión en NLP.

Para esto, vamos a utilizar una librería denominada BeautifulSoup, que es la librería por excelencia para remover o quitar etiquetas de HTML y todo tipo de cosas relacionadas con la web. Entonces, a la librería le pasamos el texto e, inmediatamente, se nos haría la limpieza.

Por otro lado, debemos aplicar el módulo de Regex, el módulo de stopwords de nltk y el stemming de nltk:

#Ejercicio de deep learning 
#BeautifulSoup to easily remove HTML tags
from bs4 import BeautifulSoup

#RegEx for removing non - letter characters
import re

#NLTK library for the remaining steps
import nltk
nltk.dowload ("stopwords") #download list of stopwords (only once; need not run it again)
from nltk.corpus import stopwords #import stopwords

from nltk.stem.porter import *
stemmer = PorterStemmer ()
Ejercicio de Deep Learning

Ahora escribiremos una función de limpieza. Lo primero que haremos es quitar todas las etiquetas HTML; esto lo hacemos pasándole la review a BeautifulSoup. Le decimos que este es un contenido HTML y, gracias a los comandos siguientes, el texto queda completamente limpio.

El siguiente paso en nuestro ejercicio de deep learning es convertir todo el texto a minúscula y quitarle las cosas innecesarias, como caracteres especiales o caracteres que no tengan ninguna relación con el texto en cuestión, saltos de línea, de párrafo, etc. Una forma rápida de hacerlo es aplicando una Regex, que, en este caso, lo que va a hacer es quitar todo lo que no sean letras mayúsculas o minúsculas, o números del 1 al 9. Todo lo que detecte le diremos que nos lo sustituya por un espacio:

#Ejercicio de deep learning 
def review_to_words (review)
       " " " Convert a raw review string into a sequence of words." " "
       #Eliminamos las etiquetas HTML
       text = BeautifulSoup (review, "html5lib").get_text ()
       #Convertimos a minúscula y quitamos todo lo que no sea texto o números.
       text = re.sub (r" [^a-zA-Z0-9] ",  "  " , text.lower ())
       #Dividimos por espacios
       words = text.split ()
       #Eliminamos stopwords
       words = [w for w in words if w not in stopwords.words ("english")]
       #Aplicamos stemming
       words = [PorterStemmer ().stem (w) for w in words]

       return words


       review_to_words (" " "This is just a <em> test </em>. <br/> <br  />
But if it wasn't a test, it would make for a <b> Great </b> movie review! " " ")

[‘test’, ‘test’, ‘would’, ‘make’, ‘great’, ‘movi’, ‘review’]

Hasta ahora solo hemos aplicado la función en un string; ahora tendremos que aplicarla en el dataset entero y, para ello, haremos la parte de preprocesamiento:

#Ejercicio de deep learning 
import pickle

cache_dir = os.path.join ("cache", "sentiment_analysis")
os.makedirs (cache_dir, exist_ok = True)

def preprocess_data (data_train, data_test, labels_train, labels_test, cache_dir = cache_dir, cache_file = "preprocessed_data.pkl"):
       " " "Convert each review to words; read from cache if available." " "
      
      cache_data = None
      if cache_file is not None:
            try:
                  with open (os.path.join (cache_dir, cache_file), "rb") as f:
                        cache_data = pickle.load (f)
                  print ("Read preprocessed data from cache file:", cache_file)
            except:
                  pass

      if cache_data is None:
            words_train = list (map (review_to_wrods, data_train))
            words_test = list (map (review_to_wrods, data_test))

            if cache_file is not None:
                  cache_data = dict (words_train = words_train, words_test = words_test, labels_train = labels_train, labels_test = labels_test)
                  with open (os.path.join (cache_dir, cache_file), "wb") as f:
                        pickle.dump (cache_data, f)
                  print ("Wrote preprocessed data to cache file:", cache_file)
      else:
            words_train, words_test, labels_train, labels_test = (cache_data ['words_train'], cache_data ['words_test'], cache_data ['labels_train'], ['labels_test'])

      return words_train, words_test, labels_train, labels_test

#Ejercicio de deep learning 
words_train, words_test, labels_train, labels_test = preprocess_data (
data_train, data_test, labels_train, labels_test)

print ("\n - - - Raw review - - - ")
print (data_train [1])
print ("\n - - - Preprocessed words - - - ")
print (words_train [1])
print ("\n - - - Label - - - ")
print (labels_train [1])
Ejercicio de Deep Learning sobre análisis de sentimientos. P2: preprocesado

Ahora que hemos visto la parte de preprocesado de nuestro ejercicio de deep learning, podemos dar el siguiente paso en nuestro proceso formativo y continuar aprendiendo.

Para acceder a las opciones laborales del Big Data, una de las áreas en el mundo de la industria tech mejor pagadas y más demandadas hoy en día, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva y de alta calidad adquirirás los conocimientos imprescindibles para alcanzar tus metas laborales en pocos meses. ¡No sigas esperando para impulsar tu futuro y solicita más información ahora!

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado