Pipeline de preprocesamiento en NLP

| Última modificación: 23 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este post haremos un pipeline de preprocesamiento en NLP. Tendremos la oportunidad de aplicar muchos de los conceptos que hemos visto hasta ahora en NLP en un solo documento.

Pipeline de preprocesamiento en NLP

  1. Con qué tipo de documentos se va a trabajar.
  2. Qué información contienen y en qué formato.
  3. Cardinalidad del corpus.
  4. Extracción de PoS tags (verbos, adjetivos…).
  5. Minúsculas.
  6. Stopwords .
  7. Lematización.
  8. Signos de puntuación.
  9. Espacios repetidos.
  • En el paso 1 hemos hecho la definición de un text_normalizer, el cual se pasa por diferentes parámetros. Text es el texto que vamos a trabajar, le pasamos como parámetro opcional la lematización, luego está la ruta donde se encuentran los datos y el fichero, y por último, tenemos la opción, por si se quiere, de aplicarle stopwords al texto.
  • En el paso 2 lo que haremos es verificar si la lista de stopwords es vacía. Si es vacía, la hacemos como un diccionario vacío.
  • En el paso 3 recogemos los lemas del fichero de lematización.
  • En el paso 4 convertimos todo el texto que tengamos a minúsculas.
  • En el paso 5 eliminamos todos los caracteres extraños que contenga el texto (es decir, caracteres fuera de lugar, que no concuerden con el sentido y gramática del texto).
  • En el paso 6 cogemos todos los signos de puntuación y los sustituimos por caracteres vacíos.
  • Ya tenemos el texto en minúsculas, sin acentos y sin puntuaciones. Ahora lo que haremos en el paso 7 es separarlo en frases, es decir, hacemos un split en cada punto que veamos.
  • Ahora, en el paso 8, lo que haremos para cada frase es recoger las palabras. Para cada una de las palabras en la frase:
    • Paso 9: si la palabra no está como símbolo de puntuación y no está en la lista de stopwords, lo que hacemos es un translate. Con esto quitamos las puntuaciones.
    • Paso 10: si le hemos puesto la opción de lematizar, lo que vamos a hacer es lematizar cada una de las palabras que se van encontrando en la frase.
    • Paso 11: en el caso de que sea un número, nos lo va a convertir a un string, sin ordinalidad, y nos lo añadirá a la lista de palabras.
  • Después, en el paso 12, cuando nos devuelve la frase, hace un join de la lista de strings que va a tener en processed_text y nos lo va a devolver ya como frase procesada:
#Pipeline de preprocesamiento en NLP
#Paso 1
def text_normalizer (text, lemmatize = False, data_path = ' ./data', lemmas_file = 'lemmatization-es.txt', sw_list = None):
proccessed_text = []
#Paso 2
if  sw_list is None_
     sw_list = []
#Paso 3
if lemmatize:
    lemmas_dict = get_lemmas_dict ()
#Paso 4
#Convierte el texto a minúsculas
text = text.lower ()
#Pipeline de preprocesamiento en NLP
#Paso 5
#Eliminar caracteres "extraños"
text = unicodedata.normalize ('NFKD', text).encode ('ascii, 'ignore'.decode ('utf-8', 'ignore')
#Paso 6
#Tabla para eliminar signos de puntuación
table = str.maketrans (' ',  ' ',  string.punctuation)
#Paso 7
#Segmentar texto en frases
sentences = text.split (' . ')
#Pipeline de preprocesamiento en NLP
#Paso 8
#Para cada frase
for sentence in sentences:
      words = sentence.split ('  ')
      #Para cada palabra
      for word in words:
            #Paso 9
            if word not in string.punctuation and word not in sw_list: #Si se pasa, elimina stopwords
                 #Paso 10
                  if lemmatize:
                        word = lemmas_dict.get (word, word)
                  #Paso 11
                  if word.isdigit ():
                        word = num2words (word, lang = 'es')
            processed_text.append (word)
#Pipeline de preprocesamiento en NLP
#Paso 12
return '  '.join (processed_text)

Ya con esta frase procesada, tendríamos un texto en bruto y lo podríamos recoger de cualquier fuente. Le hemos aplicado un procesamiento para limpiarlo de caracteres de todo tipo que no sean de utilidad.

#Pipeline de preprocesamiento en NLP
text_1 = 'Fráse a nörmaliZAR, con números: 213 y car*acteres extraños'
frase_1 = text_normalizer (text_1, lemmatize = False)
frase_2 = text_normalizer (text_1, lemmatize = True)
print (frase_1)
print (frase_2)

Ahora que hemos visto cuál es el pipeline de preprocesamiento en NLP, podemos seguir avanzando en nuestro proceso formativo. Para poder acceder a las opciones laborales del Big Data, una de las áreas mejor pagadas, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva adquirirás los conocimientos teóricos y prácticos necesarios para conseguir el trabajo de tus sueños en pocos meses. ¡No esperes más para impulsar tu carrera y pide más información ahora!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

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