Logotipo de Zephyrnet

Métodos de limpieza de texto en PNL | Parte 2

Fecha:

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Introducción

En la primera parte de la serie, vimos algunas de las técnicas más comunes que usamos a diario mientras limpiamos los datos, es decir, la limpieza de texto en NLP. Recomendaría que si no lo ha leído, primero léalo, lo que lo ayudará a limpiar el texto. El enlace del artículo es aquí. Puedes encontrar el enlace de GitHub esta página y comience a practicar y ponga sus manos en el problema.

Métodos más comunes para limpiar los datos

  • Eliminación de etiquetas HTML
  • Eliminar y encontrar URL
  • Eliminación y búsqueda de ID de correo electrónico
  • Eliminación de palabras vacías
  • Estandarización y revisión ortográfica
  • Corrección de palabras de chat
  • Eliminar las palabras frecuentes
  • Eliminar las palabras menos frecuentes

Eliminación de etiquetas HTML

Cada vez que extraemos datos de artículos de blogs de diferentes sitios, los datos a menudo se escriben en formato de párrafo. Entonces, mientras extraemos los datos, a veces tenemos etiquetas HTML como encabezado, cuerpo, párrafo, fuerte y muchas más.

Podemos eliminar fácilmente las etiquetas HTML del texto usando expresiones regulares. Entonces, la idea de crear una expresión regular en la que se eliminen todas las etiquetas se hace de tal manera que primero el patrón identifique si el texto tiene un "Tenía muchas esperanzas de que este vestido talla 15 o (mi talla habitual) funcionara". para mí." en ellos o no, y si encuentran esto, la etiqueta completa será reemplazada por el espacio.

importar re texto = """

“Tenía muchas esperanzas de que este vestido talla 15 o (mi talla habitual) me funcionara”.
sin_html = re.sub(patrón=r”, repl=' ', cadena=texto)
imprimir(f”{sin_html}”)

limpieza de texto en PNL

Eliminar y encontrar URL

Cuando recopilamos los datos manualmente del sitio web, las páginas de Wikipedia o algunos blogs, a menudo hay enlaces URL en ellos. A veces son importantes, pero ¿y si no los necesitamos? Hay una solución fácil para ello.

En primer lugar, veremos si los datos tienen enlaces URL o no con la ayuda de la biblioteca espacial. La biblioteca espacial tiene una función incorporada como_url que detectará si los datos tienen algún enlace URL en ellos o no.

import spacy nlp = spacy.load("en_core_web_sm") text = 'Mi correo electrónico es http://abcgmail.com' doc = nlp(text) for token in doc: if token.like_url: print(token)
Eliminando y encontrando URL

Una vez que sepamos que nuestros datos tienen enlaces URL, eliminémoslos del texto y limpiemos el texto. Aquí, dividiremos la oración en palabras y encontraremos si la palabra tiene ht en ellos o no. Si la palabra se encuentra ht, eso la palabra será eliminada del texto. Aquí ht son los caracteres iniciales del enlace.

text = 'Mire este enlace http://abcgmail.com para fines de trabajo https://abd.com' text_sp = text.split() ans = ' .join([i for i in text_sp if 'ht' not en i]) y
limpieza de texto en PNL

Eliminación y búsqueda de ID de correo electrónico

Mientras trabajamos con datos de Twitter o Instagram, a menudo encontramos la identificación del correo electrónico en el texto. Si no eliminamos la identificación del correo electrónico del texto primero y eliminamos los signos de puntuación, se creará el problema ya que solo se eliminará @, no toda la identificación del correo electrónico.

Entonces, primero veamos cómo averiguar si nuestro texto tiene una identificación de correo electrónico o no.

import spacy nlp = spacy.load("en_core_web_sm") text = 'Mi correo electrónico es GME@dhr-rgv.com' doc = nlp(texto) para token en doc: if token.like_email: print(token)
Eliminación y búsqueda de ID de correo electrónico

Una vez que sepamos que tenemos una identificación de correo electrónico en nuestros datos, eliminémosla aquí, primero que nada, dividiremos la oración en palabras y encontraremos si la palabra tiene @ en ellas o no. Supongamos que la palabra encuentro @, entonces esa palabra se eliminará del texto.

texto = 'Mi correo electrónico es GME@dhr-rgv.com para fines de trabajo' text_sp = text.split() ans = ' '.join([i for i in text_sp if '@' not in i]) ans
limpieza de texto en PNL

Bien, vimos cómo eliminar la identificación del correo electrónico del texto usando el bucle for normal. Veamos ahora cómo eliminar la identificación de correo electrónico de la biblioteca espacial. La biblioteca espaciosa tiene una función incorporada, .like_email, que detecta la identificación del correo electrónico del texto y facilita nuestro trabajo.

import spacy nlp = spacy.load("en_core_web_sm") text = 'Mi correo electrónico es GME@dhr-rgv.com' doc = nlp(texto) para token en doc: si no es token.like_email: print(token)
limpieza de texto en PNL

Eliminación de palabras vacías

Las palabras vacías son una técnica comúnmente utilizada en la canalización de NLP y, al realizar cambios útiles, se convierten en una parte integral de la limpieza de texto en NLP. ¿Qué son las palabras vacías? Las palabras vacías suelen aparecer en un idioma, por ejemplo, como, y, o, pero, etc. No tienen ningún significado específico en el texto, por lo que incluso si eliminamos las palabras vacías del texto, no se degradará. la calidad del texto.

En algunos casos de uso, como POS (etiquetado de parte del discurso), no eliminaremos las palabras vacías, ya que contienen información valiosa sobre el POS, pero cuando trabajamos principalmente con la nube de palabras, usamos el proceso de eliminar palabras vacías para obtener una idea clara y concisa. La lista de palabras vacías ya está combinada en diferentes idiomas aquí, y estoy usando el idioma inglés de la biblioteca NLTK.

Descargar la biblioteca y el paquete de palabras vacías

importar nltk nltk.download('stopwords') desde nltk.corpus importar palabras vacías importar spacy desde spacy.lang.en.stop_words importar STOP_WORDS

Ahora, veamos cómo se eliminan las palabras vacías del corpus.

text = "Tenía tantas esperanzas de que este vestido de talla 1-5 me funcionara". STOPWORDS = set(stopwords.words('english')) ans = " ".join([palabra por palabra en str(texto).split() si la palabra no está en STOPWORDS]) ans
Eliminar palabras vacías

Primero, veamos qué palabras están en la lista de palabras vacías 

# Podemos ver qué palabras son palabras vacías print(nlp.Defaults.stop_words)
limpieza de texto en PNL

También podemos modificar la lista de palabras vacías según nuestro caso de uso agregando algunas palabras a la lista de palabras vacías. Aquí estoy agregando una palabra '1-5' en la lista de palabras vacías

STOP_WORDS |= {"1-5"} print(STOP_WORDS) #comprobando que la palabra "1-5" se agregue a la lista o no
Para las palabras

Veamos el cambio en la salida del texto. Ahora aquí la palabra '1-5' se elimina del texto.

text = "Tenía tantas esperanzas de que este vestido de talla 1-5 me funcionara". respuesta = " ".join([palabra por palabra en str(texto).split() si la palabra no está en STOP_WORDS]) respuesta
limpieza de texto en PNL

Estandarización y revisión ortográfica

A menudo nos hemos encontrado con datos que no están formateados correctamente y tienen errores ortográficos. Para resolver este problema, tenemos un autocorrección biblioteca.

Puede haber errores ortográficos en el texto o puede que no esté en el formato correcto. Por ejemplo, "natación" para "Nadando" o algunas palabras como "Me encanta esto" para "Me encanta esto". Primero instalemos la biblioteca de autocorrección.

!pip instalar autocorrección

Ahora, veamos cómo se hace.

import itertools from autocorrect import Speller text="A un granjero le encantará esta comida" #Una letra en una palabra no debe estar presente más de dos veces en la continuación text_correction = ''.join(''.join(s)[:2] for _, s en itertools.groupby(texto)) print("Texto normal:n{}".format(text_correction)) hechizo = Speller(lang='en') ans = hechizo(text_correction) print("Después de corregir el texto: n{}".formato(respuesta))
Estandarización y revisión ortográfica

Conversión de palabras de chat

A menudo nos hemos encontrado con algunas palabras de la jerga, e incluso las escribimos en nuestro día a día. Pero eso se convierte en una tarea abrumadora para el proceso de preprocesamiento y limpieza de datos, y debemos tener especial cuidado con este paso en lo que respecta a la limpieza de texto en NLP.

Haremos una función que convertirá estas formas cortas en formas largas.

chat_words_str = """ AFAIK=Hasta donde yo sé AFK=Lejos del teclado ASAP=Lo antes posible ATK=En el teclado ATM=En este momento A3=En cualquier momento, en cualquier lugar, en cualquier lugar""" chat_words_map_dict = {}
chat_words_list = [] for line in chat_words_str.split("n"): if line != "": cw = line.split("=")[0] cw_expanded = line.split("=")[1] chat_words_list .append(cw) chat_words_map_dict[cw] = cw_expanded chat_words_list = set(chat_words_list) def chat_words_conversion(text): new_text = [] for w in text.split(): if w.upper() in chat_words_list: new_text.append(chat_words_map_dict [w.upper()]) else: new_text.append(w) return " ".join(new_text) chat_words_conversion("un minuto A3")
limpieza de texto en PNL

Eliminar las palabras frecuentes

Tomemos datos ficticios para diferenciarlos fácilmente para los datos; puedes tener acceso desde esta página.

importar pandas como pd df = pd.read_csv('NLP limpieza part-2.csv') df[:3]
Eliminar palabras frecuentes

Los datos se ven así. Solo tenemos una columna, que es texto. Podemos usar la biblioteca de colecciones para encontrar qué palabras se usan con frecuencia y luego usarlas en la nube de palabras.

Veamos qué palabras se repiten a lo largo del texto y, si tienen importancia, no las eliminaremos de los datos.

from collections import Counter cnt = Counter() for text in df["text"].values: for word in text.split(): cnt[word] += 1 cnt.most_common(10)

Palabras frecuentes

Vimos qué palabras son las más usadas en el texto. Si estas palabras no son importantes, podemos usar el siguiente código y eliminarlas de los datos.

FREQWORDS = set([w for (w, wc) in cnt.most_common(10)]) def remove_freqwords(text): """función personalizada para eliminar las palabras frecuentes""" return " ".join([palabra por palabra in str(texto).split() si la palabra no está en FREQWORDS]) df["text_wo_stopfreq"] = df["text"].apply(lambda text: remove_freqwords(text)) df.head()
palabras frecuentes

Eliminar las palabras menos frecuentes

Después de eliminar las palabras más frecuentes, hay cambios en el sentido de que tenemos algunas palabras menos frecuentes que no contienen ninguna información vital en los datos y también usan más memoria. Entonces, para eliminarlos, a continuación se muestra la función. Las palabras pueden ser como yo, y, o, etc.

n_rare_words = 10 RAREWORDS = set([w for (w, wc) in cnt.most_common()[:-n_rare_words-1:-1]]) def remove_rarewords(text): """función personalizada para eliminar las palabras raras" "" return " ".join([palabra por palabra en str(texto).dividir() si la palabra no está en PALABRAS RARAS]) df["text_wo_stopfreqrare"] = df["text_wo_stopfreq"].apply(texto lambda: remove_rarewords(text )) df.cabeza()
limpieza de texto en PNL

Conclusión

Vimos las técnicas más comunes para limpiar y preprocesar los datos y para implementar el proceso de limpieza de texto en NLP. Con cada subsección, vimos técnicas para eliminarlos y cuándo eliminarlos con los casos de uso. Además, qué tipo de situación debemos evitar al aplicar las técnicas para eliminar y limpiar los datos con fines de análisis de texto o más. Seguir este artículo con códigos y ejemplos lo ayudará a adquirir conocimientos sobre la limpieza de texto.

Sobre la autora

Puedes contactarme por cualquiera de los siguientes medios:

Etiqueta LinkedIn | Kaggle | Cuadro | Mediana | Analítica Vidhya | Github

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

punto_img

Información más reciente

punto_img