Preprocesamiento de texto en Python | Serie 1

Requisitos previos: Introducción a la PNL
Siempre que tengamos datos textuales, debemos aplicar varios pasos de preprocesamiento a los datos para transformar las palabras en características numéricas que funcionan con algoritmos de aprendizaje automático. Los pasos de preprocesamiento de un problema dependen principalmente del dominio y del problema en sí, por lo tanto, no es necesario aplicar todos los pasos a todos los problemas. 
En este artículo, vamos a ver el preprocesamiento de texto en Python. Usaremos la biblioteca NLTK (Natural Language Toolkit) aquí. 
 

Python3

# import the necessary libraries
import nltk
import string
import re

Texto en minúsculas:

Ponemos en minúsculas el texto para reducir el tamaño del vocabulario de nuestros datos de texto.
 

Python3

def text_lowercase(text):
    return text.lower()
 
input_str = "Hey, did you know that the summer break is coming? Amazing right !! It's only 5 more days !!"
text_lowercase(input_str)

Ejemplo: 
 

Entrada: “Oye, ¿sabías que se acercan las vacaciones de verano? Impresionante verdad!! ¡¡Son solo 5 días más!!” 
Salida: “oye, ¿sabías que se acerca el receso de verano? espectacular verdad!! ¡¡Solo son 5 días más!!” 
 

Eliminar números:

Podemos eliminar números o convertir los números en sus representaciones textuales. 
Podemos usar expresiones regulares para eliminar los números. 
 

Python3

# Remove numbers
def remove_numbers(text):
    result = re.sub(r'\d+', '', text)
    return result
 
input_str = "There are 3 balls in this bag, and 12 in the other one."
remove_numbers(input_str)

Ejemplo: 
 

Entrada: «Hay 3 bolas en esta bolsa y 12 en la otra». 
Salida: ‘Hay pelotas en esta bolsa y en la otra.’ 
 

También podemos convertir los números en palabras. Esto se puede hacer usando la biblioteca inflect.
 

Python3

# import the inflect library
import inflect
p = inflect.engine()
 
# convert number into words
def convert_number(text):
    # split string into list of words
    temp_str = text.split()
    # initialise empty list
    new_string = []
 
    for word in temp_str:
        # if word is a digit, convert the digit
        # to numbers and append into the new_string list
        if word.isdigit():
            temp = p.number_to_words(word)
            new_string.append(temp)
 
        # append the word as it is
        else:
            new_string.append(word)
 
    # join the words of new_string to form a string
    temp_str = ' '.join(new_string)
    return temp_str
 
input_str = 'There are 3 balls in this bag, and 12 in the other one.'
convert_number(input_str)

Ejemplo: 
 

Entrada: «Hay 3 bolas en esta bolsa y 12 en la otra». 
Resultado: «Hay tres bolas en esta bolsa y doce en la otra». 
 

Eliminar puntuación:

Eliminamos los signos de puntuación para no tener diferentes formas de la misma palabra. Si no eliminamos la puntuación, entonces estado. sido, sido! serán tratados por separado.
 

Python3

# remove punctuation
def remove_punctuation(text):
    translator = str.maketrans('', '', string.punctuation)
    return text.translate(translator)
 
input_str = "Hey, did you know that the summer break is coming? Amazing right !! It's only 5 more days !!"
remove_punctuation(input_str)

Ejemplo: 
 

Entrada: “Oye, ¿sabías que se acercan las vacaciones de verano? Impresionante verdad!! ¡¡Son solo 5 días más!!” 
Salida: «Oye, ¿sabías que se acercan las vacaciones de verano? Increíble, solo son 5 días más». 
 

Eliminar espacios en blanco:

Podemos usar la función de unir y dividir para eliminar todos los espacios en blanco en una string.
 

Python3

# remove whitespace from text
def remove_whitespace(text):
    return  " ".join(text.split())
 
input_str = "   we don't need   the given questions"
remove_whitespace(input_str)

Ejemplo: 
 

Input: "   we don't need   the given questions"
Output: "we don't need the given questions"

Eliminar palabras vacías predeterminadas:

Las palabras vacías son palabras que no contribuyen al significado de una oración. Por lo tanto, pueden eliminarse con seguridad sin causar ningún cambio en el significado de la oración. La biblioteca NLTK tiene un conjunto de palabras vacías y podemos usarlas para eliminar palabras vacías de nuestro texto y devolver una lista de tokens de palabras.
 

Python3

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
 
# remove stopwords function
def remove_stopwords(text):
    stop_words = set(stopwords.words("english"))
    word_tokens = word_tokenize(text)
    filtered_text = [word for word in word_tokens if word not in stop_words]
    return filtered_text
 
example_text = "This is a sample sentence and we are going to remove the stopwords from this."
remove_stopwords(example_text)

Ejemplo: 
 

Entrada: «Esta es una oración de muestra y vamos a eliminar las palabras vacías de esto» 
Salida: [‘Esto’, ‘muestra’, ‘oración’, ‘va’, ‘eliminar’, ‘palabras vacías’] 
 

Derivación:

Stemming es el proceso de obtener la raíz de una palabra. La raíz o raíz es la parte a la que se le añaden los afijos flexivos (-ed, -ize, -de, -s, etc.). La raíz de una palabra se crea eliminando el prefijo o el sufijo de una palabra. Por lo tanto, derivar una palabra puede no resultar en palabras reales.
Ejemplo: 
 

books      --->    book
looked     --->    look
denied     --->    deni
flies      --->    fli

Si el texto no está en tokens, entonces debemos convertirlo en tokens. Después de convertir strings de texto en tokens, podemos convertir la palabra tokens en su forma raíz. Existen principalmente tres algoritmos para la derivación. Estos son el Porter Stemmer, el Snowball Stemmer y el Lancaster Stemmer. Porter Stemmer es el más común entre ellos.
 

Python3

from nltk.stem.porter import PorterStemmer
from nltk.tokenize import word_tokenize
stemmer = PorterStemmer()
 
# stem words in the list of tokenized words
def stem_words(text):
    word_tokens = word_tokenize(text)
    stems = [stemmer.stem(word) for word in word_tokens]
    return stems
 
text = 'data science uses scientific methods algorithms and many types of processes'
stem_words(text)

Ejemplo: 
 

Entrada: ‘la ciencia de datos usa métodos científicos, algoritmos y muchos tipos de procesos’ 
Salida: [‘datos’, ‘ciencia’, ‘uso’, ‘científico’, ‘método’, ‘algoritmo’, ‘y’, ‘mani’, ‘tipo’, ‘de’, ‘proceso’] 
 

Lematización:

Al igual que la derivación, la lematización también convierte una palabra a su forma raíz. La única diferencia es que la lematización asegura que la raíz de la palabra pertenece al idioma. Obtendremos palabras válidas si usamos la lematización. En NLTK, usamos WordNetLemmatizer para obtener los lemas de las palabras. También necesitamos proporcionar un contexto para la lematización. Entonces, agregamos la parte del discurso como parámetro. 
 

Python3

from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
lemmatizer = WordNetLemmatizer()
# lemmatize string
def lemmatize_word(text):
    word_tokens = word_tokenize(text)
    # provide context i.e. part-of-speech
    lemmas = [lemmatizer.lemmatize(word, pos ='v') for word in word_tokens]
    return lemmas
 
text = 'data science uses scientific methods algorithms and many types of processes'
lemmatize_word(text)

Ejemplo: 
 

Entrada: ‘la ciencia de datos usa métodos científicos, algoritmos y muchos tipos de procesos’ 
Salida: [‘datos’, ‘ciencia’, ‘uso’, ‘científico’, ‘métodos’, ‘algoritmos’, ‘y’, ‘muchos’, ‘tipo’, ‘de’, ‘proceso’] 
 

Publicación traducida automáticamente

Artículo escrito por jacobperalta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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