Etiquetado de Palabras en Python con NLTK y Stanza

Clase 2 de 26Curso de Algoritmos de Clasificación de Texto

Resumen

¿Cómo se etiquetan palabras en inglés usando NLTK?

El etiquetado de palabras en inglés con NLTK es un proceso relativamente sencillo gracias a los algoritmos preentrenados disponibles en la librería. Para comenzar, necesitamos importar la librería NLTK y descargar algunos recursos esenciales como el tokenizador de palabras. Una vez que tenemos los recursos listos, podemos aplicar el etiquetado usando el método pos_tag de NLTK.

import nltk
nltk.download('averaged_perceptron_tagger')
nltk.download('punkt')
from nltk.tokenize import word_tokenize

# Texto en inglés para etiquetar
text = "The quick brown fox jumps over the lazy dog"

# Tokenización del texto
tokens = word_tokenize(text)

# Etiquetado de las palabras
tags = nltk.pos_tag(tokens)
print(tags)

Este código segmenta un texto en palabras y les asigna etiquetas gramaticales como sustantivo (NN), verbo (VB), etc. Estas etiquetas corresponden a un estándar de categorías gramaticales conocido.

¿Cómo podemos entender el significado de las etiquetas?

NLTK proporciona un conjunto de etiquetado que podemos descargar para obtener más información sobre lo que significan estas etiquetas. Esto se realiza mediante el siguiente proceso:

nltk.download('tagsets')

# Lista de etiquetas que queremos explorar
etiquetas = ['CC', 'RB', 'PRP']

# Mostrar significado de cada etiqueta
for tag in etiquetas:
    descripcion = nltk.help.upenn_tagset(tag)
    print(descripcion)

Utilizando la descarga de conjuntos de etiquetas, podemos ver qué categoría gramatical representa cada etiqueta y ejemplos de su uso.

¿Cómo se etiquetan palabras en español usando NLTK?

El etiquetado de palabras en español con NLTK requiere pasos adicionales ya que no existen algoritmos preentrenados para este idioma. Estos son algunos pasos que debemos seguir:

  1. Obtener un corpus en español, como el cess_esp.
  2. Entrenar un modelo con un subconjunto del corpus.
  3. Evaluar el modelo.

¿Cómo funciona el etiquetado utilizando unigramas?

El etiquetador de unigramas utiliza el contexto de una palabra para asignarle una etiqueta gramátical.

from nltk.corpus import cess_esp as ces
from nltk.tag import UnigramTagger

# Separar las frases del corpus cess_esp
frases = ces.sents()

# Definir una fracción del dataset para entrenamiento
fraccion = int(len(frases) * 0.9)

# Entrenar un etiquetador de unigramas
etiquetador_unigrama = UnigramTagger(frases[:fraccion])

# Evaluar el etiquetador
precision = etiquetador_unigrama.evaluate(frases[fraccion:])
print(f"Precisión del etiquetador de unigramas: {precision}")

Este proceso implica entrenar al etiquetador con un 90% del dataset y evaluar su precisión con el 10% restante. También podemos etiquetar nuevas oraciones en español con etiquetador_unigrama.tag().

¿Es mejor el etiquetado usando bigramas?

Aunque uno podría pensar que los bigramas —que consideran el contexto de pares de palabras consecutivas— pueden ser más efectivos, en práctica no siempre es así. La implementación es similar, pero generalmente arroja una precisión más baja, como se muestra a continuación:

from nltk.tag import BigramTagger

# Entrenar un etiquetador de bigramas
etiquetador_bigrama = BigramTagger(frases[:fraccion])

# Evaluar el etiquetador de bigramas
precision_bigrama = etiquetador_bigrama.evaluate(frases[fraccion:])
print(f"Precisión del etiquetador de bigramas: {precision_bigrama}")

Es crucial probar ambos métodos y elegir el más adecuado dependiendo del caso de uso. El etiquetador de unigramas suele ofrecer mejores resultados en español.

¡Sigue explorando el fascinante mundo del procesamiento de lenguaje natural! Cada herramienta que domines te acerca más a ser un experto en esta área en constante evolución.