¿Cómo usar expresiones regulares para definir algoritmos de tokenización en Python?
Las expresiones regulares son una herramienta poderosa que nos permite manipular texto de manera eficiente. En particular, cuando se trata de procesar lenguaje natural, podemos utilizarlas para definir algoritmos de tokenización en Python. En esta clase, exploraremos cómo aprovechar las expresiones regulares con la librería NLTK para tokenizar texto y limpiar nuestro corpus para análisis.
¿Qué es una cadena de texto RAW y cómo se utiliza?
Para que Python interprete una cadena de texto sin reconocer caracteres especiales, debemos utilizar el prefijo r
delante de la cadena. Esto indica que Python debe tratar los caracteres especiales como texto plano, también conocido como texto "RAW".
Por ejemplo:
print(r"Esta es una cadena con una nueva línea \n que será mostrada tal cual.")
El uso de la r
convierte a los caracteres especiales en parte del texto y no en comandos ejecutables dentro de la cadena, lo que es esencial cuando tratamos con texto que incluye caracteres de escape.
¿Cómo tokenizar texto con espacios vacíos?
Tokenizar texto es el proceso de dividirlo en unidades más pequeñas, conocidas como "tokens". El método más básico de tokenización es mediante la separación por espacios vacíos, y esto se puede lograr fácilmente utilizando la función split
de la librería re
.
import re
texto = "Cuando sea el rey del mundo, (imaginaba él en su cabeza) no tendré que preocuparme por estas bobadas."
tokens = re.split(r'\s+', texto)
Aquí, el uso de \s+
permite dividir el texto en base a uno o más espacios vacíos, creando tokens individuales para cada palabra.
¿Cómo mejorar la tokenización con expresiones regulares?
Para lograr un nivel de tokenización más sofisticado, podemos desarrollar expresiones regulares que filtren caracteres especiales no deseados.
Consideremos la siguiente expresión regular:
tokens = re.split(r'[ \t\n]+', texto)
Esta expresión busca espacios, tabulaciones y nuevas líneas, proporcionando una tokenización más limpia al eliminar estos caracteres del proceso.
¿Cómo crear un tokenizador sofisticado con NLTK?
A medida que los textos se vuelven más complejos, con caracteres y símbolos especiales, las expresiones regulares básicas no son suficientes. Aquí es donde NLTK ofrece una excelente solución con la función RegexpTokenizer
.
Una aplicación avanzada de esta técnica se puede ver como sigue:
from nltk.tokenize import RegexpTokenizer
pattern = r'\b\w+\b'
tokenizer = RegexpTokenizer(pattern)
tokens = tokenizer.tokenize(texto)
El patrón \b\w+\b
permite capturar palabras completas, evitando caracteres que no contribuyen al contenido semántico del texto.
¿Por qué usar Regex Token Eyes de NLTK?
Cuando enfrentamos textos altamente complejos, con abreviaciones, números decimales y otros elementos, Regex Token Eyes de NLTK se convierte en un recurso inestimable. Este tokenizador emplea expresiones regulares complejas para lograr una tokenización precisa.
from nltk.tokenize import RegexpTokenizer
pattern = r"\b\w+\b(?:[.\-]\w+)*"
tokenizer = RegexpTokenizer(pattern)
tokens = tokenizer.tokenize("En los EE.UU., esa postal vale quince cincuenta dólares...")
Así, podemos capturar correctamente acrónimos, precios y otros casos especiales como tokens únicos, mejorando significativamente la calidad del análisis.
Con herramientas como estas, estás en capacidad de construir un tokenizador tanto básico como avanzado para diversas aplicaciones en procesamiento de lenguaje natural. ¡Sigue explorando y sorprendiendo al mundo con tus habilidades en Python!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?