Python: limpieza eficiente de datos de texto

Atrás quedaron los días en que solíamos tener datos principalmente en formato de filas y columnas, o podemos decir datos estructurados . En la actualidad, los datos que se recopilan están más desestructurados que estructurados . Tenemos datos en forma de texto, imágenes, audio, etc. y la proporción de datos estructurados y no estructurados ha disminuido a lo largo de los años. Los datos no estructurados aumentan entre un 55 y un 65 % cada año.

Por lo tanto, debemos aprender a trabajar con datos no estructurados para poder extraer información relevante de ellos y hacerlos útiles. Al trabajar con datos de texto, es muy importante procesarlos previamente antes de usarlos para predicciones o análisis.
En este artículo, aprenderemos varias técnicas de limpieza de datos de texto usando python.

Tomemos un tweet como ejemplo:

I enjoyd the event which took place yesteday & I luvd it ! The link to the show is 
http://t.co/4ftYom0i It's awesome you'll luv it #HadFun #Enjoyed BFN GN

Realizaremos la limpieza de datos en este tweet paso a paso.

Pasos para la limpieza de datos

1) Borrar caracteres HTML: Muchas entidades HTML como ‘ ,&erio; ,< etc se pueden encontrar en la mayoría de los datos disponibles en la web. Necesitamos deshacernos de estos de nuestros datos. Puede hacer esto de dos maneras:

  • Mediante el uso de expresiones regulares específicas o
  • Mediante el uso de módulos o paquetes disponibles ( htmlparser de python)

Usaremos el módulo ya disponible en python. 

Código: 

python3

#Escaping out HTML characters
from html.parser import HTMLParser
 
tweet="I enjoyd the event which took place yesteday & I lovdddd itttt ! The link to the show is http://t.co/4ftYom0i It's awesome you'll luv it #HadFun #Enjoyed BFN GN" 
tweet=HTMLParser().unescape(tweet)
print("After removing HTML characters the tweet is:-\n{}".format(tweet))

Producción:

2) Codificación y decodificación de datos: es el proceso de convertir información de caracteres simples y comprensibles a símbolos complejos y viceversa. Hay diferentes formas de codificación y decodificación como «UTF8», «ascii», etc. disponibles para datos de texto. Debemos mantener nuestros datos en un formato de codificación estándar. El formato más común es el formato UTF-8.

El tweet dado ya está en formato UTF-8, por lo que lo codificamos en formato ascii y luego lo decodificamos en formato UTF-8 para explicar el proceso.

Código: 

python3

#Encode from UTF-8 to ascii
encode_tweet =tweet.encode('ascii','ignore')
print("encode_tweet = \n{}".format(encode_tweet))
 
#decode from ascii to UTF-8
decode_tweet=encode_tweet.decode(encoding='UTF-8')
print("decode_tweet = \n{}".format(decode_tweet))

 Producción:

3) Eliminación de URL, hashtags y estilos: en nuestro conjunto de datos de texto, podemos tener hipervínculos, hashtags o estilos como el texto de retweet para el conjunto de datos de Twitter, etc. Estos no brindan información relevante y se pueden eliminar. En los hashtags, solo se eliminará el signo de almohadilla ‘#’. Para esto, usaremos la biblioteca re para realizar operaciones de expresiones regulares.

Código: 

python3

#library for regular expressions
import re   
 
# remove hyperlinks
tweet = re.sub(r'https?:\/\/.\S+', "", tweet)
 
# remove hashtags
# only removing the hash # sign from the word
tweet = re.sub(r'#', '', tweet)
 
# remove old style retweet text "RT"
tweet = re.sub(r'^RT[\s]+', '', tweet)
 
print("After removing Hashtags,URLs and Styles the tweet is:-\n{}".format(tweet))

Producción:

4) Reemplazo de contracción: los datos de texto pueden contener apóstrofes utilizados para las contracciones. Ejemplo : «no» por «no», etc. Esto puede cambiar el sentido de la palabra o la oración. Por lo tanto, debemos reemplazar estos apóstrofes con los léxicos estándar. Para hacerlo podemos tener un diccionario que consiste en el valor con el que se necesita reemplazar la palabra y usar eso.

Few of the contractions used are:-
n't --> not        'll --> will
's  --> is        'd  --> would
'm  --> am        've --> have
're --> are

Código: 

python3

#dictionary consisting of the contraction and the actual value
Apos_dict={"'s":" is","n't":" not","'m":" am","'ll":" will",
           "'d":" would","'ve":" have","'re":" are"}
 
#replace the contractions
for key,value in Apos_dict.items():
    if key in tweet:
        tweet=tweet.replace(key,value)
 
print("After Contraction replacement the tweet is:-\n{}".format(tweet))

Producción:

5) Dividir palabras adjuntas:  algunas palabras se unen, por ejemplo, «ForTheWin» . Estos necesitan ser separados para poder extraer el significado de ello. Después de la división, será «For The Win»

Código: 

python3

import re
#separate the words
tweet = " ".join([s for s in re.split("([A-Z][a-z]+[^A-Z]*)",tweet) if s])
print("After splitting attached words the tweet is:-\n{}".format(tweet))

Producción:

6) Convertir a minúsculas: convierta su texto a minúsculas para evitar problemas relacionados con la distinción entre mayúsculas y minúsculas.

Código: 

python3

#convert to lower case
tweet=tweet.lower()
print("After converting to lower case the tweet is:-\n{}".format(tweet))

Producción:

7) Búsqueda de jerga: hay muchas palabras de jerga que se usan hoy en día y se pueden encontrar en los datos de texto. Entonces necesitamos reemplazarlos con sus significados. Podemos usar un diccionario de palabras de la jerga como lo hicimos para el reemplazo de la contracción, o podemos crear un archivo que consista en las palabras de la jerga. Ejemplos de palabras de la jerga son: –

asap --> as soon as possible
b4   --> before
lol  --> laugh out loud
luv  --> love
wtg  --> way to go

Estamos usando un archivo que consta de las palabras. Puede descargar el archivo slang.txt . La fuente de este archivo fue tomada de aquí .

Código: 

python3

#open the file slang.txt
file=open("slang.txt","r")
slang=file.read()
 
#separating each line present in the file
slang=slang.split('\n')
 
tweet_tokens=tweet.split()
slang_word=[]
meaning=[]
 
#store the slang words and meanings in different lists
for line in slang:
    temp=line.split("=")
    slang_word.append(temp[0])
    meaning.append(temp[-1])
 
#replace the slang word with meaning
for i,word in enumerate(tweet_tokens):
    if word in slang_word:
        idx=slang_word.index(word)
        tweet_tokens[i]=meaning[idx]
         
tweet=" ".join(tweet_tokens)
print("After slang replacement the tweet is:-\n{}".format(tweet))

Producción:

8) Estandarización y revisión ortográfica: Puede haber errores ortográficos en el texto o puede que no esté en el formato correcto. Por ejemplo, «conduciendo» por «conduciendo» o «Extraño esto» por «Extraño esto». Podemos corregirlos usando la biblioteca de autocorrección para python. Hay otras bibliotecas disponibles que también puede usar. Primero, deberá instalar la biblioteca usando el comando-

#install autocorrect library
 pip install autocorrect

Código: 

python3

import itertools
#One letter in a word should not be present more than twice in continuation
tweet = ''.join(''.join(s)[:2] for _, s in itertools.groupby(tweet))
print("After standardizing the tweet is:-\n{}".format(tweet))
 
from autocorrect import Speller
spell = Speller(lang='en')
#spell check
tweet=spell(tweet)
print("After Spell check the tweet is:-\n{}".format(tweet))

Producción:

9) Eliminar palabras vacías: las palabras vacías son las palabras que aparecen con frecuencia en el texto pero que no le agregan un significado significativo. Para ello, utilizaremos la biblioteca nltk, que consta de módulos para el preprocesamiento de datos. Nos proporciona una lista de palabras vacías. También puede crear su propia lista de palabras vacías según el caso de uso.

Primero, asegúrese de tener instalada la biblioteca nltk . Si no es así, descárguelo usando el comando-

#install nltk library
 pip install nltk

Código: 

python3

import nltk
#download the stopwords from nltk using
nltk.download('stopwords')
#import stopwords
from nltk.corpus import stopwords
 
#import english stopwords list from nltk
stopwords_eng = stopwords.words('english')
 
tweet_tokens=tweet.split()
tweet_list=[]
#remove stopwords
for word in tweet_tokens:
    if word not in stopwords_eng:
        tweet_list.append(word)
 
print("tweet_list = {}".format(tweet_list))

Producción:

10) Eliminar puntuaciones: las puntuaciones consisten en !,<@#&$, etc. 

Código: 

python3

#for string operations
import string         
clean_tweet=[]
#remove punctuations
for word in tweet_list:
    if word not in string.punctuation:
        clean_tweet.append(word)
 
print("clean_tweet = {}".format(clean_tweet))

Producción:

Estas fueron algunas técnicas de limpieza de datos que solemos realizar en el formato de datos de texto. También puede realizar una limpieza avanzada de datos, como revisión gramatical, etc. 

Publicación traducida automáticamente

Artículo escrito por shristikotaiah 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 *