Bienvenido al asombroso mundo del Procesamiento del Lenguaje Natural (PLN), en el que los ordenadores comprenden cada vez mejor lo que decimos.
¿Ha pensado alguna vez cómo entienden los ordenadores el lenguaje humano? La respuesta está en un secreto especial: la PNL.
La mayoría de los modelos de PNL nos hablan con fluidez, todo gracias a un cuidadoso refinamiento del texto. En este artículo vamos a hablar de los pasos cruciales que da la PNL.
Hablaremos de cosas como la puntuación, los caracteres especiales, las stopwords, el stemming e incluso la lematización. Desde la descomposición de las frases hasta la corrección de las faltas de ortografía: estamos aquí para hacer que estas ideas sean fáciles de entender.
Pero eso no es todo: también nos sumergiremos en temas más complejos como el tratamiento de los números, la claridad de las contracciones y el manejo de las etiquetas HTML más complicadas. Cada parte de nuestro artículo le mostrará el trabajo oculto que hace brillar a la PNL. Prepárese para aprender cómo la limpieza y el preprocesamiento del texto hacen que la PNL haga sus maravillas de formas que nunca hubiera imaginado.
¿Qué es la PNL?
Elprocesamiento del lenguaje natural (PNL) es como combinar la informática, el lenguaje humano y la inteligencia artificial. Se trata de crear instrucciones y herramientas especiales para que los ordenadores puedan entender, explicar y crear el lenguaje humano.
El PNL utiliza métodos de la informática y la IA para ayudar a los ordenadores a averiguar qué significan las palabras y las frases, igual que hacemos nosotros. Esto ayuda a que los ordenadores hablen mejor con nosotros y se parezcan más a las conversaciones reales. Esta área especial ha dado lugar a cosas geniales como la traducción de idiomas, chatbots útiles y la comprensión de los sentimientos en el texto. Es donde la tecnología y el lenguaje se encuentran.
Por ejemplo, la PNL es útil en
- Chatbots de respuesta a preguntas
- Cerraduras de audio para móviles/ordenadores
- Reconocimiento del habla
- Detección de spam en el correo electrónico
- Resumir
Hay dos aspectos clave en el Procesamiento del Lenguaje Natural (PLN):
- LaComprensión del Lenguaje Natural (NLU) se centra en enseñar a los ordenadores a comprender e interpretar el lenguaje humano. Los algoritmos NLU ayudan a los ordenadores a«entender» lo que los humanos dicen o escriben. El NLU ayuda a los ordenadores a captar el significado, el contexto y la estructura del lenguaje, lo que les permite responder con precisión y eficacia.
- Generación de lenguaje natural (NLG): NLG consiste en conseguir que los ordenadores produzcan textos similares a los humanos. Los algoritmos NLG toman datos o información estructurados y los convierten en frases o párrafos legibles y coherentes. Es como enseñar a los ordenadores a escribir El NLG utiliza patrones y reglas para generar contenidos aptos para los humanos que resulten naturales y comprensibles.
Terminología básica en PNL
- Corpus: Es una gran colección de documentos de texto como noticias, tweets, información, etc. Es útil para que los ordenadores aprendan de ellos. Ej- Corpus consta de documentos (Documento-1, Documento-2, Documento-3……….)
- Documento: El documento consta de diferentes párrafos.
- Token y tokenización: Los tokens son partes más pequeñas de las frases, y la tokenización es el proceso de convertir las frases en tokens. Ej – Supongamos que ésta es una frase «Me llamo Sanket». Entonces, tras la tokenización, obtendremos [«Mi», «Nombre», «es», «Sanket»]
- Morfina (Palabra base): La palabra con sentido más pequeña sin prefijo ni sufijo. Ej- «Incómodo»: «Un» «Confort» «Capaz». Así pues, aquí nuestra palabra base es Confort.
Ahora, ¡exploremos cada uno de los pasos y técnicas de la limpieza de textos!
Técnicas de limpieza de textos
Eliminación de entidades ruidosas
La eliminación de entidades ruidosas es un paso crucial en la PNL, en el que se identifican y eliminan de los datos de texto las entidades irrelevantes o sin sentido.
Al eliminar entidades como términos genéricos, símbolos y nombres no relacionados, el texto se vuelve más centrado y preciso, lo que mejora la calidad de las tareas de PNL como el análisis de sentimientos y el reconocimiento de entidades con nombre. Este proceso garantiza que los análisis se basen en contenidos significativos, libres de elementos de distracción o intrascendentes.
a] Eliminación de caracteres especiales y signos de puntuación:
Una parte de este proceso consiste en eliminar los caracteres especiales y la puntuación. Se trata de las letras y símbolos no normales, como los emoticonos o las letras extranjeras. También incluyen esos puntos, comas y marcas que ayudan a que las frases parezcan organizadas.
He aquí por qué es importante: estos caracteres y marcas pueden dificultar la lectura de las palabras. Pueden confundir a las máquinas que intentan entender las palabras o averiguar su significado. Por eso los eliminamos para asegurarnos de que las máquinas entienden mejor las palabras y pueden hacer su trabajo, como averiguar el significado de las palabras o averiguar cómo se siente la gente al escribir.
Algunos ejemplos de caracteres especiales y signos de puntuación que se suelen eliminar son:
| # ‘ « ¡ , .% & ^*! @ ( ) _ = – [ ]$ > \ { } ` ~; : /? <
He aquí un código Python que le permitirá proporcionar una comprensión de cómo se puede eliminar la puntuación del texto :
importar nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt') # Descargar el tokenizador punkt
# Definir función
def eliminar_puntuación(texto):
words = word_tokenize(text) # Tokenizar el texto en palabras
words_without_punct = [word for word in words if word.isalnum()] # Mantener sólo las palabras alfanuméricas
texto_limpio = ' '.join(palabras_sin_punto) # Volver a unir las palabras en un texto limpio
return texto_limpio
# Ejemplo de texto de entrada con puntuación
input_text = "¡Hola a todos! ¿Cómo estáis?"
# Elimine la puntuación utilizando nltk
texto_limpiado = eliminar_puntuación(texto_entrada)
print("Texto de entrada:", texto_entrada)
print("Texto limpiado:", texto_limpiado)
Salida:
Texto de entrada: ¡Hola a todos! ¿Cómo estáis?
Texto limpiado: Hola a todos ¿Cómo están?
b] Eliminación de stopwords:
Las stopwords son palabras comunes que utilizamos como «el», «y», «es» y «en» que aparecen con frecuencia en un idioma pero que a menudo no conllevan un significado significativo por sí solas. Dado que el objetivo de la PNL es descubrir ideas significativas a partir de datos de texto, la eliminación de las palabras clave es crucial. Las stopwords pueden afectar a tareas como la clasificación de textos, el análisis de sentimientos y el modelado de temas al introducir una complejidad innecesaria y sesgar potencialmente los resultados.
Para mejorar la eficacia de las tareas de PNL, se utilizan varios métodos para identificar y eliminar las palabras clave. Un enfoque habitual consiste en utilizar listas predefinidas de palabras de exclusión específicas de un idioma. Estas listas contienen palabras que generalmente se considera que tienen poco valor semántico. Las bibliotecas de PNL, como NLTK o spaCy en Python, ofrecen listas de palabras clave incorporadas que pueden emplearse con este fin.
importar nltk
from nltk.corpus import stopwords
nltk.download('punkt')
nltk.download('stopwords')
# Frase de muestra con más stopwords
sentence = 'Hay tantas películas en el mundo, pero pocas han podido ganar el Oscar'
# Tokenizar la frase
palabras = nltk.word_tokenize(frase)
# Cargar las stopwords inglesas
stop_words = set(stopwords.words('ingles'))
# Eliminar palabras_de_parada
palabras_filtradas = [w para w en palabras si w.lower() no en palabras_de_parada]
print("Frase original:", frase)
print("Después de eliminar las palabras clave:", " ".join(palabras_filtradas))
Salida:
Frase original: Hay muchas películas en el mundo, pero pocas han podido ganar el Oscar.
Después de la eliminación de palabras clave: Muchas películas mundo, pocos capaces de ganar Oscar.
¡Avancemos hacia la corrección ortográfica!
c] Revisión y corrección ortográfica:
La revisión ortográfica desempeña un papel crucial en la limpieza de textos al identificar y corregir las faltas de ortografía en los contenidos escritos. Una ortografía imprecisa puede crear confusión e influir negativamente en la credibilidad del texto. La corrección ortográfica automatizada garantiza que el texto no contenga errores y comunique el mensaje deseado con eficacia. En diversos campos, como la comunicación, la creación de contenidos y el análisis de datos, una ortografía precisa es esencial para mantener la profesionalidad y garantizar un análisis exacto.
Se emplean varias técnicas para la corrección ortográfica automática. Un enfoque habitual consiste en utilizar diccionarios o modelos lingüísticos preconstruidos que contengan una lista de palabras correctamente escritas.
from corrector ortográfico import Corrector ortográfico
# Crear un objeto SpellChecker
spell = Corrector ortográfico()
# Texto de muestra con errores ortográficos
text = "I Havv a gret idea To improov the Efficiensy of our procEss."
# Tokenizar el texto
palabras = text.split()
# Encontrar y corregir las palabras mal escritas
palabras_corregidas = [corrección.ortográfica(palabra) para palabra en palabras]
# Unir las palabras corregidas para formar el texto corregido
texto_corregido = " ".join(palabras_corregidas)
print("Texto original:", texto)
print("Texto corregido:", texto_corregido)
Salida:
Texto original: I Havv a gret idea To improov the Efficiensy of our procEss.
Texto corregido: Tengo una gran idea para mejorar la eficacia de nuestro proceso.
Ahora vamos a entender cómo manejar valores numéricos en PNL:
d] Manejo de numéricos y entidades de nombre:
La información numérica y la relativa a fechas son tipos comunes de datos que aparecen en los textos en lenguaje natural. Pueden consistir en información importante como cantidades, medidas, precios, fechas, horas, duraciones, etc.
Por ejemplo, el número 1000 puede escribirse como «mil», «1.000», «1K», «103» o «千» en diferentes contextos.
Para superar estos retos, los sistemas de PNL necesitan utilizar algunas estrategias para codificar o normalizar los datos numéricos y de fechas. Codificar significa transformar los datos en una representación adecuada para su procesamiento o análisis. Normalizar significa convertir los datos en una forma estándar o coherente más fácil de comparar o manipular.
Estrategias para superar estos retos
Tokenización: Dividir el texto en unidades más pequeñas como palabras, números, símbolos y signos de puntuación. Ayuda a reconocer datos numéricos y de fechas dentro del texto. (Como se ha mencionado anteriormente)
Análisis sintáctico: Análisis de la estructura y el significado del texto utilizando la gramática y la lógica. Aclara el contexto de los datos numéricos y de fechas, resolviendo la ambigüedad.
Conversión: Alterar los formatos numéricos y de fecha para que sean coherentes. Normaliza la información utilizando un sistema común.
Extracción: Identificar y aislar los datos numéricos y de fechas mediante patrones o reglas. Captura la información relevante para su análisis o procesamiento.
Este código extraerá valores numéricos utilizando expresiones regulares. Estamos utilizando la biblioteca dateutil para extraer los datos:
import re
from dateutil.parser import parse
# Muestra de texto que contiene información numérica y de fecha
text = "Las ventas del año 2023 alcanzaron los 100.000 dólares el 2023-08-31"
# Extraiga la información numérica utilizando expresiones regulares
numerical_entities = [int(match) for match in re.findall(r'\d ', text)]
# Extraer información de fechas utilizando la biblioteca dateutil
date_entities = parse(text, fuzzy_with_tokens=True)[0]
print("Entidades numéricas:", entidades_numéricas)
print("Entidades de fecha:", date_entities)
Salida:
Entidades numéricas: [2023, 100000, 2023, 08, 31]
Entidades de fecha: 2023-08-31 00:00:00
De este modo podemos extraer entidades numéricas de nuestro texto.
e] Manejo de contracciones y abreviaturas:
Cuando reducimos palabras como «I’m» por «I am» o «NLP» por «Natural Language Processing», se trata de contracciones y abreviaturas. Volver a expandirlas es importante para los sistemas de PNL. Ayuda a limpiar el texto, facilitando su comprensión y evitando cualquier confusión. Expandir las contracciones y abreviaturas puede ayudar a:
- Mejora la coherencia y el rendimiento del modelo de PNL.
- Reduce el uso de memoria y la carga computacional.
- Aclara la ambigüedad y mantiene el sentimiento.
- Para ampliar las contracciones y abreviaturas pueden utilizarse varios métodos, como diccionarios, reglas y aprendizaje automático, cada uno con sus puntos fuertes y sus consideraciones.
Enfoques para el tratamiento de contracciones y abreviaturas
- Basados en diccionarios
- Basado en la gramática
- Basado en el aprendizaje automático
Enfoque simple basado en diccionario:
Este código amplía las contracciones y abreviaturas.
# Texto de muestra con contracciones y abreviaturas
text = "Me alegro de verle y estoy impaciente por hablar de PNL"
# Diccionario de contracciones con significado
diccionario_contracciones = {
"soy" "Yo soy",
"no puedo": "no puedo"
# Añada más contracciones y sus expansiones según sea necesario
}
# Función para expandir contracciones
def expandir_contracciones(texto, contraccion_dict):
palabras = texto.split()
palabras_expandidas = [contraccion_dict.get(palabra, palabra) for palabra in palabras]
texto_expandido = " ".join(palabras_expandidas)
return texto_expandido
texto_expandido = expandir_contracciones(texto, diccionario_contracciones)
print("Texto original:", texto)
print("Texto expandido:", texto_expandido)
Salida:
Texto original: Me alegro de verle y estoy impaciente por hablar de PNL.
Texto expandido: Me alegro de verle y estoy impaciente por hablar de PNL.
Podemos añadir o eliminar abreviaturas y contracciones según nuestras necesidades.
f] Manejo de etiquetas y marcas HTML:
Las etiquetas HTML se escriben dentro de corchetes angulares (< y >) y suelen venir en pares, como
y
para un párrafo. Las etiquetas HTML son códigos que dan formato a las páginas web, influyendo en cómo se muestra el contenido. Pueden complicar el análisis del texto al introducir ruido y alterar la estructura. Sin embargo, ofrecen pistas semánticas útiles para tareas como el resumen.Para tratar las etiquetas HTML en los datos de texto, podemos utilizar algunas técnicas para despojarlas y preservar el contenido del texto. Despojar de etiquetas HTML significa eliminar o sustituir las etiquetas HTML de los datos de texto, mientras que preservar el contenido del texto significa mantener u obtener el texto sin formato de los datos de texto.
Técnicas para gestionar las etiquetas HTML:
Expresión regular: Elimina rápidamente las etiquetas HTML, pero puede ser imprecisa si las etiquetas son complejas.
Parser HTML: Comprende con precisión las etiquetas pero puede ser más lento e intrincado.
Web Scraper: Obtiene fácilmente texto sin formato de páginas web, pero su disponibilidad puede ser limitada.
He aquí el código para lograr esto utilizando BeautifulSoup:
from bs4 import BeautifulSoup
importar solicitudes
importar re
# URL de la página web de la que extraer el texto
url = "https://www.example.com" # Sustituir por la URL real
# Obtener el contenido HTML de la página web
respuesta = requests.get(url)
contenido_html = respuesta.contenido
# Crear un objeto BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Elimine las etiquetas HTML utilizando expresiones regulares
texto_limpiado = re.sub(r'<.*?>', '', soup.get_text())
print("HTML original:")
print(html_contenido)
print("Texto limpiado (sin etiquetas HTML):")
print(texto_limpiado)
Para ejecutar el código anterior, tiene que sustituir «https://www.example.com» por un enlace real. Con la ayuda de BeautifulSoup, obtendrá el contenido de ese sitio web. Tras el desguace web, eliminará las etiquetas HTML utilizando expresiones regulares.
Ahora, pasemos al Preprocesamiento de texto.
Preprocesamiento del texto
En cualquier proyecto de PNL, la tarea inicial es el preprocesamiento del texto. El preprocesamiento consiste en organizar el texto de entrada en un formato coherente y analizable. Este paso es esencial para crear una aplicación PNL notable.
Existen diferentes formas de preprocesar el texto:
- Tokenización
- Normalización
- Normalización
De todos ellos, uno de los pasos más importantes es la tokenización. La tokenización consiste en dividir una secuencia de datos de texto en palabras, términos, frases, símbolos u otros componentes significativos conocidos como tokens. Existen muchas herramientas de código abierto para llevar a cabo el proceso de tokenización.
Tokenización
La tokenización es la fase inicial de cualquier proceso de PNL e influye significativamente en todo el proceso. Al emplear un tokenizador, los datos no estructurados y el texto en lenguaje natural se segmentan en fragmentos manejables. Estos fragmentos, conocidos como tokens, pueden tratarse como componentes distintos. En un documento, la frecuencia de los tokens puede aprovecharse para crear un vector que represente el documento.
Esta rápida transformación convierte una cadena sin estructurar (documento de texto) en una estructura numérica adecuada para el aprendizaje automático. Los tokens poseen el potencial de instruir directamente a los ordenadores para que inicien acciones y respuestas valiosas. Alternativamente, pueden funcionar como atributos en una secuencia de aprendizaje automático, desencadenando decisiones o comportamientos más intrincados.
La tokenización implica la división del texto en frases, palabras, caracteres o subpalabras. Cuando segmentamos el texto en frases, se denomina tokenización de frases. Por otro lado, si lo dividimos en palabras, se conoce como tokenización de palabras.
Existen diferentes tipos de tokenización:
Ejemplo de tokenización de frases:
sent_tokenize("Mi película favorita es gratis chico")
–> [«Mi película favorita es free guy»]
Ejemplo de tokenización de palabras:
Word_tokenize("Elon musk es un hombre de negocios")
–> [«Elon», «musk», «is», «a», «Businessman»]
a] Tokenización de espacios en blanco
La forma más sencilla de tokenización consiste en dividir el texto allí donde haya un espacio o un espacio en blanco. Es como cortar una frase en trozos dondequiera que haya un espacio. Aunque este enfoque es sencillo, puede que no trate eficazmente la puntuación o los casos especiales.
Ejemplo de tokenización de espacios en blanco:
«¡El procesamiento del lenguaje natural es increíble!»
–> [«Natural», «lenguaje», «procesamiento», «es», «¡asombroso!»].
b] Tokenización por expresiones regulares
La tokenización por expresiones regulares consiste en utilizar patrones para definir dónde dividir el texto en tokens. Esto permite una tokenización más precisa, manejando la puntuación y los casos especiales mejor que la simple división en espacios en blanco.
Ejemplo de tokenización por expresiones regulares:
«Envíeme un correo electrónico a jack.sparrow@blackpearl.com.»
–> [«Email», «me», «at», «jack», «.», «sparrow», «@», «blackpearl», «.», «com», «.»]
c] Tokenización de palabras y subpalabras
Este enfoque se centra en preservar los signos de puntuación como tokens separados. Es especialmente útil cuando mantener el significado de los signos de puntuación es crucial, como en el análisis de sentimientos.
La tokenización de subpalabras divide las palabras en unidades significativas más pequeñas, como sílabas o partes de palabras. Es especialmente útil en lenguas con estructuras de palabras complejas.
Ejemplo de tokenización de palabras:
«¡Vaya! Esto es increíble»
–> [«¡Vaya!», «!», «Esto», «es», «increíble», «.»]
Ejemplo de tokenización de subpalabras:
«increíble»
–> [«increíble», «creíble»]
d] Tokenización por codificación de bytes y pares (BPE)
La codificación byte-par es una técnica de tokenización de subpalabras que divide las palabras en unidades más pequeñas en función de su frecuencia de aparición. Resulta especialmente útil para tratar palabras raras o fuera de vocabulario.
e] Tokenización de bancos de árboles
La tokenización de bancos de árboles emplea reglas predefinidas basadas en convenciones lingüísticas para tokenizar el texto. Tiene en cuenta factores como las contracciones y las palabras con guión.
Ejemplo: «¡No puedo creer que sea 23 de agosto!»
–> [«I», «can», «‘t», «believe», «it», «‘s», «August», «23rd», «!»].
Así pues, estos son los tipos de tokenización. Ahora, pasaremos a la Normalización del texto.
Normalización del texto
Minúsculas y mayúsculas
Normalizar los casos de texto significa convertir el texto al mismo caso, normalmente minúsculas, para facilitar su procesamiento y análisis. Estandarizar los casos de texto implica convertir todas las letras de un texto en las mismas, a menudo en minúsculas, para que sea más fácil trabajar con él. Esto es útil en cosas como el análisis del lenguaje, en el que utilizamos ordenadores para comprender palabras y frases. Cuando hacemos esto, estamos como ordenando el texto para que los ordenadores puedan entenderlo mejor.
Hacer esto ayuda a que el texto sea más coherente y elimina la confusión. Por ejemplo, si contamos la frecuencia con la que aparecen las palabras, queremos que «Manzana» y «manzana» se vean como la misma cosa. No queremos que el ordenador las trate como palabras diferentes sólo por la mayúscula. ¡Es como ser justos con todas las palabras!
Pero hay ocasiones en las que no seguimos esta regla. A veces, las mayúsculas son importantes. Por ejemplo, en informática, tenemos nombres para cosas que deben permanecer iguales, como «Reino Unido» o «NASA». Además, si alguien escribe en MAYÚSCULAS, como «¡ALTO!» o «SOS» el significado es diferente o puede que esté mostrando sus emociones.
Otra cosa que hay que saber es que existen diferentes estilos de escritura. A veces, en el código informático, las palabras se unen_así o se separan_por_puntuación.
En resumen, estandarizar las mayúsculas y minúsculas es como darle al texto un bonito corte de pelo para que los ordenadores puedan entenderlo. Pero recuerde que hay casos especiales en los que rompemos la norma por buenas razones.
Este código comprueba si dos palabras, «Apple» y «apple», son iguales convirtiéndolas a minúsculas. Si lo son, imprimirá que son iguales; de lo contrario, imprimirá que son diferentes.
# Normalización de mayúsculas y minúsculas en texto
palabra1 = "Manzana"
palabra2 = "manzana"
# Convertir las palabras a minúsculas
palabra1_minúscula = palabra1.minúscula()
palabra2_lower = palabra2.lower()
# Comparación de palabras normalizadas
if palabra1_inferior == palabra2_inferior:
print("Las palabras son iguales cuando se ignoran las mayúsculas y minúsculas")
si no:
print("Las palabras son diferentes incluso cuando se ignoran las mayúsculas y minúsculas.")
Salida:
Las palabras son iguales cuando se ignoran las mayúsculas y minúsculas.
Pasemos a la normalización.
Normalización
La normalización es el proceso en el que los tokens se convierten en su forma base. En la normalización, se elimina la inflexión de la palabra para obtener su forma base.
El objetivo de la normalización es reducir las variaciones en el texto que no conllevan un significado significativo pero que pueden afectar a la precisión de las tareas de PNL. Se utilizan diferentes formas de normalización para abordar retos específicos en el procesamiento de textos.
Por ejemplo
am, are, is => be
cat, cats, cat’s, cats’ => cat
Apliquemos el mapeo a la frase siguiente:
Todos los gatos del Don son de distinto color => Todos los gatos del Don son de distinto color
Existen métodos populares de normalización en PNL.
- Stemming
- Lematización
a] Stemming
Antes de sumergirnos en el stemming, familiaricémonos con el término«stem» Piense en las raíces de las palabras como la forma básica de una palabra. Cuando les añadimos partes adicionales, se denomina inflexión, y así es como creamos nuevas palabras.
Las palabras madre son las que quedan después de eliminar los prefijos y sufijos de una palabra. A veces, el stemming puede producir palabras que no están en el diccionario o sin significado. Por lo tanto, el stemming no es tan bueno como una técnica de lematización en diversas tareas.
Ej- «Rápido», «Más rápido», «Más rápido»
Palabra stemmed- «Quickli» (No es una palabra del diccionario)
Ej – «Las ranas bailan y los perros cantan»
Stemmed Tokens: [‘rana’, ‘son’, ‘bailan‘, ‘y’, ‘perro’, ‘son’, ‘cantan’]
Sobre tallo: Más letras tallo, o más de un tallo se asigna a la misma palabra, y los significados originales se pierden.
Ej- «Computer», «Compute», y «Computation» –> «Comput»
Debajo de la raíz: Compruebe este ejemplo
Ej- «Salto», «Salto» y «Salto» –> «Salto», «Salto» y «Salto».
Aquí las tres palabras deberían haberse derivado a la palabra base «salto», pero el algoritmo no lo ha captado.
Tipos de stemmers en NLTK:
- PorterStemmer,
- LancasterStemmer,
- SnowballStemmer, etc.
Estamos utilizando los tres stemmers (PorterStemmer, LancasterStemmer, SnowballStemmer) para el stemming. Rompe la frase en palabras individuales, luego intenta tres formas diferentes de hacer las palabras lo más cortas posible, e imprime los tokens stemmed para su comparación.
importar nltk
from nltk.stem import PorterStemmer, LancasterStemmer, SnowballStemmer
from nltk.tokenize import word_tokenize
nltk.download('punkt')
# Frase de muestra
frase = "las ranas bailan y los perros cantan"
tokens = word_tokenize(frase)
# Stemmers
stemmers = [PorterStemmer(), LancasterStemmer(), SnowballStemmer("inglés")]
for stemmer in stemmers
stemmed_tokens = [stemmer.stem(token) for token in tokens]
print(f"{tallador.__clase__.__nombre__} Tokens tallados:", stemmed_tokens)
Salida:
PorterStemmer Stemmed Tokens: ['rana', 'son', 'bailan', 'y', 'perro', 'son', 'cantan', '.']
LancasterStemmer Stemmed Tokens: ['rana', 'ar', 'dant', 'y', 'perro', 'ar', 'cantar', '.']
SnowballStemmer Stemmed Tokens: ['frog', 'are', 'danc', 'and', 'dog', 'are', 'sing', '.']
Existen muchas otras bibliotecas para hacer lo mismo. Ahora, tratemos de entender qué es la lematización:
b] Lematización
La lematización es también lo mismo que el Stemming con un pequeño cambio. La lematización convierte las palabras en formas base significativas. La lematización es un procedimiento de obtención de la forma base de la palabra con el significado adecuado según las relaciones de vocabulario y gramática.
La lematización es una forma de cambiar una palabra a su forma básica o normal, llamada lema. Por ejemplo, la forma normal de la palabra «gatos» es «gato», y la forma normal de «correr» es «correr».
La lematización necesita conocer el tipo de palabra correcto y el significado de una palabra en una frase y también la situación más amplia en torno a esa frase. A diferencia de cortar las terminaciones de las palabras, la lematización intenta elegir la forma normal correcta en función de la situación.
Puede elegir cualquiera de los siguientes lematizadores según sus necesidades:
- Lematizador Wordnet
- Lematizador Spacy
- TextBlob
- Patrón CLiPS
- Stanford CoreNLP
- Lemmatizador Gensim
- TreeTagger
Vamos a utilizar la biblioteca NLTK para realizar la lematización utilizando WordnetLemmatizer. Primero tokeniza la frase, luego lematiza para encontrar palabras base significativas del vocabulario, y luego las vuelve a poner para imprimir la frase lematizada.
importar nltk
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
nltk.download('punkt')
nltk.download('wordnet')
# Crear un objeto lematizador
lemmatizador = WordNetLemmatizador()
# Frase de ejemplo
frase = "Los chicos corren y los mosquitos vuelan"
# Tokenizar la frase
tokens = word_tokenize(sentencia)
# Lematizar los tokens
lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens]
# Una los tokens lematizados para formar una frase
frase_lematizada = " ".join(fichas_lematizadas)
print("Frase original:", frase)
print("Frase lematizada:", frase_lematizada)
Salida:
Frase original: los niños corren y los mosquitos vuelan.
Frase lematizada: Los chicos corren y los mosquitos vuelan.
Ahora, ¡es hora de concluir!
Conclusión
En este artículo, hemos explorado los fundamentos del Procesamiento del Lenguaje Natural (PLN). Aprendimos sobre la importancia del PLN en diversas áreas y comenzamos nuestro viaje comprendiendo cómo limpiar y preparar el texto. Cubrimos la eliminación de caracteres especiales, la tokenización del texto y mucho más. También comprendimos conceptos como normalización, stemming, lematización y manejo de números y fechas. Además, pudimos echar un vistazo al manejo de contenidos HTML.
Sin embargo, nuestro viaje continúa. Hay todo un mundo de métodos avanzados de limpieza de texto por descubrir. Nos sumergiremos en el etiquetado Part-of-Speech, exploraremos distintas herramientas y bibliotecas y nos sumergiremos en apasionantes proyectos de PNL. Este artículo es sólo el principio; prepárese para la segunda parte, donde le esperan más conocimientos.
Si desea aprender Procesamiento del Lenguaje Natural, aquí tiene algunos de los mejores cursos de PNL.