Un tutorial completo sobre preprocesamiento de texto en NLP

En el ciclo de vida de cualquier proyecto de ciencia de datos , la limpieza y el preprocesamiento de datos es el aspecto de rendimiento más importante. Por ejemplo, si está tratando con datos de texto no estructurados , que son complejos en todos los datos, y realiza el mismo modelado, suceden dos cosas. O tendrá un gran error o su modelo no se comportará como espera. Es posible que se haya preguntado cómo los sistemas modernos de asistencia de voz como Google Assist, Alexa y Siri entienden, procesan y responden al lenguaje humano, así que aquí está el gran problema, el procesamiento del lenguaje natural.

El Procesamiento del Lenguaje Natural , NLP, es una técnica derivada del análisis semántico de datos con la ayuda de la informática y la inteligencia artificial. Básicamente es el arte de extraer información significativa de datos sin procesar, y su propósito es crear una interconexión entre el lenguaje natural y las computadoras, lo que significa analizar y modelar grandes cantidades de datos de lenguaje natural. Al aprovechar el poder de la PNL, se pueden resolver problemas comerciales del mundo real, como resumir documentos, generar titulares, detectar fraudes, reconocimiento de voz y, lo que es más importante, traducción automática neuronal, por nombrar algunos.

El procesamiento de texto es un método utilizado en NLP para limpiar texto y prepararlo para construir un modelo. Es versátil y contiene varias formas de ruido, como emoción, puntuación y texto escrito como números o caracteres especiales. Tenemos que lidiar con estas preguntas importantes porque las máquinas no las entenderán y solo preguntarán números. Comenzando con el procesamiento de texto, ciertas bibliotecas escritas en Python simplifican este proceso y su sintaxis directa brinda mucha flexibilidad. El primero es NLTK, que significa Natural Language Toolkit y es útil para todas las tareas como derivación, POS, tokenización, lexicalización y más.

Probablemente conozca las abreviaturas; no hay oración sin acrónimos, lo que significa que tendemos a usar palabras de una manera cada vez, como did't en lugar de didn't, luego cuando tokenizamos esas palabras, lo que sucede, viene en forma de ' did' 't' y no se puede hacer nada con esas palabras. Para manejar tales palabras, existe una biblioteca llamada abreviaturas. BeautifulSoup es una biblioteca para web scraping, pero a veces tendemos a obtener datos con etiquetas HTML y URL, para manejar esto, se usa BeautifulSoup. Y para convertir números a texto, usamos la biblioteca inflect.

Implementar el preprocesamiento de texto

En el siguiente código Python, eliminamos el ruido de los datos de texto sin procesar del conjunto de datos de análisis de sentimiento de Twitter. Después de eso, haremos la eliminación de palabras de parada, la lematización y el procesamiento léxico.

Importar todas las dependencias.
! pip install contractions
import nltk
import contractions
import inflect
from nltk import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem import LancasterStemmer, WordNetLemmatizer
from bs4 import BeautifulSoup
import re, string, unicodedata
复制代码
Eliminar ruido.

El primer paso es eliminar el ruido de los datos; en el dominio del texto, el ruido se refiere a cosas que no son relevantes para el texto en lenguaje humano y que tienen varias propiedades, como caracteres especiales, uso de paréntesis, uso de corchetes, espacios en blanco, URL y puntuación.

A continuación se muestra el texto de muestra con el que estamos trabajando.

Como puede ver, primero hay muchas etiquetas HTML y una URL, debemos eliminarlas, para esto usamos BeautifulSoup. El fragmento de código a continuación elimina ambos.

# to remove HTML tag
def html_remover(data):
  beauti = BeautifulSoup(data,'html.parser')
  return beauti.get_text()

# to remove URL
def url_remover(data):
  return re.sub(r'https\S','',data)

def web_associated(data):
  text = html_remover(data)
  text = url_remover(text)
  return text

new_data = web_associated(data)
复制代码

Después de eliminar las etiquetas HTML y las URL, todavía hay algo de ruido de puntuación y espacios en blanco, así como datos de texto entre paréntesis; esto también debe procesarse.

def remove_round_brackets(data):
  return re.sub('\(.*?\)','',data)

def remove_punc(data):
  trans = str.maketrans('','', string.punctuation)
  return data.translate(trans)

def white_space(data):
  return ' '.join(data.split())

def complete_noise(data):
  new_data = remove_round_brackets(data)
  new_data = remove_punc(new_data)
  new_data = white_space(new_data)
  return new_data

new_data = complete_noise(new_data)
复制代码

Ahora, como puede ver, hemos eliminado con éxito todo el ruido del texto.

Normaliza el texto.

Normalmente, la normalización de texto comienza tokenizando el texto, nuestro corpus más largo ahora se divide en varios fragmentos, la clase de tokenizador de NLTK puede hacer esto. Después de eso, necesitamos poner en minúsculas cada palabra en el corpus, convertir números en palabras y finalmente hacer la sustitución de acrónimos.

def text_lower(data):
  return data.lower()

def contraction_replace(data):
  return contractions.fix(data)

def number_to_text(data):
  temp_str = data.split()
  string = []
  for i in temp_str:
    # if the word is digit, converted to 
    # word else the sequence continues
    if i.isdigit():
      temp = inflect.engine().number_to_words(i)
      string.append(temp)
    else:
      string.append(i)
  return temp_str

def normalization(data):
  text = text_lower(data)
  text = number_to_text(text)
  text = contraction_replace(text)
  nltk.download('punkt')
  tokens = nltk.word_tokenize(text)
  return tokens

tokens = normalization(new_data)
print(tokens)
复制代码

Ahora nos estamos acercando al final del preprocesamiento de texto básico; ahora, solo nos queda una cosa importante: detener las palabras. Al analizar datos textuales, la palabra pausa no tiene ningún significado, solo se usa con fines decorativos. Por lo tanto, para reducir aún más la dimensionalidad, es necesario eliminar las palabras vacías del corpus.

Al final, tenemos dos opciones para representar nuestro corpus en forma de raíz o frase. Stemming por lo general intenta convertir una palabra en su forma raíz, y en su mayoría lo hace simplemente cortando la palabra. Y la lematización también es la tarea de realizar la lematización, pero de una manera adecuada significa que convierte la palabra al formato raíz, como 'escenas' se convertirá en 'escena'. Se puede elegir entre la derivación y la fijación.

def stopword(data):
  nltk.download('stopwords')
  clean = []
  for i in data:
    if i not in stopwords.words('english'):
      clean.append(i)
  return clean

def stemming(data):
  stemmer = LancasterStemmer()
  stemmed = []
  for i in data:
    stem = stemmer.stem(i)
    stemmed.append(stem)
  return stemmed

def lemmatization(data):
  nltk.download('wordnet')
  lemma = WordNetLemmatizer()
  lemmas = []
  for i in data:
    lem = lemma.lemmatize(i, pos='v')
    lemmas.append(lem)
  return lemmas  

def final_process(data):
  stopwords_remove = stopword(data)
  stemmed = stemming(stopwords_remove)
  lemm = lemmatization(stopwords_remove)
  return stemmed, lemm
stem,lemmas = final_process(tokens)
复制代码

A continuación podemos ver las palabras derivadas y adjuntas.

Conclusión.

En esta publicación, discutimos cómo el preprocesamiento de texto es necesario para la construcción de modelos. Desde el principio, aprendimos cómo eliminar las etiquetas HTML y eliminar el ruido de las URL. Primero, para eliminar el ruido, tenemos que perfilar nuestro corpus para personalizar la composición del ruido. Hemos observado una gran compensación entre la derivación y la lematización, y siempre debemos usar palabras lematizadas.

referencias

La publicación Tutorial completo sobre preprocesamiento de texto en NLP apareció primero en Analytics India Magazine .

Supongo que te gusta

Origin juejin.im/post/7086657753749405726
Recomendado
Clasificación