Como buen científico de datos, es muy común tenes proyectos e historias donde tengas que analizar grandes cantidades de texto. A veces te puede suceder que tengas que analizar texto escrito por los operadores de atención al público, o quizá analizar publicaciones de redes sociales.
Las ventajas y posibilidades que te abre minar el texto que consigas son varias:
- Análisis de sentimiento
- Medir popularidad de la marca midiendo la actividad de las publicaciones
- Identificar los puntos problemáticos en la relacion con los clientes
- Predecir sucesos, como por ejemplo identificar cuando un cliente esta por dejar la marca.
Pasos
- Escapar caracteres HTML
- Decodificar los datos
- Eliminar palabras comunes
- Eliminar puntuaciones
- Separar palabras pegadas
- Reemplazar el argot / jerga
- Estandarizar palabras
- Eliminar urls
- Controlar la gramática
- Corregir la sintaxis
Código de ejemplo
Veamos un ejemplo simple en español, no es un ejemplo que puedas ejecutar directamente, ya que asume que se han armado algunos diccionarios (como el de gramatica, sintaxis, jerga, etc) para la limpieza del texto. Al final de la entrada publicaré una pequeña lista de recursos que puedes utilizar, y en los comentarios se pueden dejar más, si es que conocen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#Limpieza de datos en Python #1.Escapar caracteres HTML import HTMLParser html_parser = HTMLParser.HTMLParser() texto = html_parser.unescape(original_tweet) #2.Decodificar los datos texto = original_tweet.decode("utf8").encode(‘ascii’,’ignore’) #3.Eliminar palabras comunes # https://www.ranks.nl/stopwords/spanish PALABRAS_COMUNES = ["un", "una", "ir", "voy",....] palabras = texto.split() reformado = ['' if palabra in PALABRAS_COMUNES else palabra for palabra in palabras] texto = " ".join(reformado) #4.Eliminar puntuaciones # CUIDADO! elimina todo tipo de puntuacion, las comas, # puntos, signos de admiracion y pregunta pueden ser # necesarios y no deberían ser eliminados import string texto = texto.translate(None, string.punctuation) #5.Separar palabras pegadas # transforma AguanteRiver en Aguante River import re limpiada = “ ”.join(re.findall(‘[A-Z][^A-Z]*’, texto)) #6.Reemplazar el argot / jerga JERGA = {"cazas":"entiendes", "LOL":"JAJAJA", "che":"hey",....} texto = [JERGA[palabra] if palabra in JERGA else palabra for palabra in palabras] #7.Estandarizar palabras # frases como "estoy muuuuuy feliz" las convertimos en "estoy muy feliz" texto = ''.join(''.join(s)[:2] for _, s in itertools.groupby(texto)) #8.Eliminar urls import re texto = re.sub(r'^https?:\/\/.*[\r\n]*', '', texto, flags=re.MULTILINE) #9.Controlar la gramática # claramente una solución final sería mucho mas complejo que este ejemplo # recomiendo utilizar alguna herramienta externa para esto GRAMATICA = {"la nene":"la nena", "el nena":"el nene", "los señor":"el señor",....} texto = [GRAMATICA [palabra] if palabra in GRAMATICA else palabra for palabra in palabras] #10.Corregir la sintaxis # al igual que el punto 9, es mejor utilizar una solucion mas completa SINTAXIS = {"senor":"señor", "dia":"día",....} texto = [SINTAXIS [palabra] if palabra in SINTAXIS else palabra for palabra in palabras] |
Recursos
- Natural Languaje Toolkit:
- http://www.nltk.org/
- Stop Words:
- https://www.ranks.nl/stopwords/spanish
- Gramática:
- https://pypi.python.org/pypi/language-check
- Sintaxis:
- https://pypi.python.org/pypi/autocorrect