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