Hasta ahora recorrimos muchos conceptos fundamentales del NLP: representación del texto, limpieza, tokenización, stopwords, normalización, Bag of Words, TF-IDF y embeddings clásicos. El paso natural a partir de aquí es empezar a trabajar con herramientas concretas.
En Python existe un ecosistema muy amplio de bibliotecas para Procesamiento de Lenguaje Natural. Algunas están orientadas al aprendizaje y al análisis lingüístico clásico, otras a pipelines eficientes para producción, y otras al entrenamiento de modelos neuronales y arquitecturas modernas.
En este tema no profundizaremos todavía en una biblioteca concreta, sino que construiremos una visión general del ecosistema para entender qué rol cumple cada herramienta y cuándo conviene usarla.
En teoría podríamos procesar texto escribiendo todo desde cero: tokenizadores, contadores de palabras, reglas gramaticales, modelos vectoriales y arquitecturas neuronales. Pero en la práctica eso sería lento, propenso a errores y poco eficiente.
Las librerías de NLP resuelven problemas comunes y ofrecen implementaciones ya probadas de tareas como:
Esto permite concentrarse más en el problema que queremos resolver y menos en reimplementar infraestructura básica.
Una de las cosas más importantes al empezar es entender que no existe una única biblioteca que haga todo de la misma manera. Cada herramienta tiene fortalezas, filosofía y casos de uso distintos.
Por ejemplo:
Elegir bien la biblioteca depende de la tarea, del nivel de profundidad buscado y del tipo de pipeline que queramos construir.
NLTK es una de las bibliotecas más conocidas en la enseñanza de NLP. Su valor principal está en que ofrece muchas herramientas clásicas y recursos lingüísticos de forma muy accesible para aprender.
Suele usarse para:
NLTK es especialmente útil cuando queremos entender fundamentos paso a paso.
Las fortalezas de NLTK están en su claridad conceptual, su tradición educativa y la cantidad de recursos didácticos que existen alrededor de ella. Sin embargo, no siempre es la opción más cómoda o eficiente para pipelines modernos de producción.
En otras palabras, NLTK es excelente para aprender y experimentar, pero no siempre será la herramienta más natural para aplicaciones industriales grandes.
spaCy es una biblioteca muy popular cuando se necesita procesamiento lingüístico eficiente y relativamente listo para aplicaciones reales. Ofrece un diseño muy orientado a pipelines y rendimiento.
Suele usarse para:
Por eso spaCy suele verse como una herramienta especialmente fuerte para proyectos aplicados.
La gran fortaleza de spaCy es que combina una interfaz relativamente limpia con buen rendimiento y componentes listos para uso práctico. Es muy útil cuando se quiere procesar texto de forma eficiente y estructurada.
Sin embargo, no cubre por sí sola todo el ecosistema moderno de modelos grandes o fine-tuning profundo. Para eso suelen entrar otras herramientas complementarias.
scikit-learn no es una biblioteca de NLP en sentido estricto, pero es fundamental en muchos pipelines clásicos de procesamiento de texto. Su valor está en la vectorización y en los modelos de Machine Learning tradicionales.
Se usa mucho para:
Por eso, en NLP clásico, scikit-learn ocupa un lugar muy importante aunque no sea una biblioteca lingüística como NLTK o spaCy.
Gensim es otra biblioteca muy relevante dentro del ecosistema clásico. Se hizo especialmente conocida por facilitar el trabajo con modelos como Word2Vec, Doc2Vec y otras técnicas de representación semántica.
Su foco está más en modelado vectorial, tópicos y embeddings clásicos que en análisis lingüístico fino.
PyTorch tampoco es una biblioteca exclusiva de NLP, pero es una de las bases más importantes para construir modelos neuronales modernos. Cuando el problema requiere redes profundas, embeddings entrenables, RNN, atención o Transformers, PyTorch entra en escena.
Su papel en NLP incluye:
En este sentido, PyTorch funciona más como plataforma de modelado que como conjunto de herramientas lingüísticas listas para usar.
En NLP moderno también se usan bibliotecas especializadas para modelos preentrenados y Transformers. Estas herramientas permiten cargar modelos existentes, ajustarlos a tareas concretas y trabajar con arquitecturas de última generación sin construir todo desde cero.
En muchos flujos de trabajo actuales, estas bibliotecas se apoyan a su vez sobre PyTorch como backend principal.
Más adelante en el curso veremos estos modelos en detalle. Por ahora lo importante es entender que el ecosistema moderno suele construirse sobre capas: una biblioteca de Deep Learning general y, arriba de ella, herramientas específicas para modelos de lenguaje.
Una distinción muy útil es separar:
Por ejemplo:
En proyectos reales, ambas capas suelen combinarse.
Es bastante habitual que un mismo proyecto use varias bibliotecas a la vez. Por ejemplo:
Esto muestra que el ecosistema de NLP en Python no funciona como un menú de exclusión mutua. Muchas veces las herramientas se complementan.
La elección de una biblioteca depende de varios factores:
No existe una única respuesta correcta. La biblioteca adecuada depende del tipo de problema y del momento del proyecto.
Es común preguntarse si conviene aprender NLTK o spaCy. La respuesta más útil suele ser que cumplen roles algo distintos.
Por eso, tiene sentido estudiar ambas en un curso como este: una ayuda a entender, la otra ayuda a aplicar.
Si pensamos en problemas como clasificación de documentos con Bag of Words o TF-IDF, scikit-learn sigue siendo una herramienta extremadamente útil. Proporciona vectorizadores, clasificadores y utilidades de evaluación que permiten construir pipelines clásicos con bastante rapidez.
Por eso, incluso aunque el curso avance hacia modelos modernos, conviene no perder de vista esta biblioteca.
Cuando el NLP pasa del conteo de palabras al aprendizaje profundo, PyTorch se vuelve central. Permite representar texto como tensores, entrenar embeddings, construir redes recurrentes y más adelante trabajar con mecanismos de atención y Transformers.
En ese sentido, PyTorch es una puerta de entrada al bloque más moderno del curso.
Una forma razonable de aprender NLP en Python suele seguir esta secuencia:
No es la única ruta posible, pero conceptualmente tiene bastante sentido.
| Biblioteca | Fortaleza principal | Uso típico |
|---|---|---|
| NLTK | Didáctica y fundamentos clásicos. | Aprendizaje, corpora, tokenización, stemming. |
| spaCy | Eficiencia y pipelines productivos. | Tokenización, entidades, lematización, parsing. |
| scikit-learn | Machine Learning clásico. | Bag of Words, TF-IDF, clasificación. |
| Gensim | Embeddings y modelado semántico clásico. | Word2Vec, Doc2Vec, tópicos. |
| PyTorch | Deep Learning. | RNN, atención, Transformers, entrenamiento en GPU. |
Este ejemplo combina bibliotecas distintas en un flujo pequeño pero realista: tokenización con NLTK, entidades con spaCy y vectorización con scikit-learn. Es una buena muestra de cómo el ecosistema suele combinarse en proyectos concretos.
Antes de ejecutar el ejemplo conviene instalar las bibliotecas necesarias con pip install nltk spacy scikit-learn.
Como el ejemplo usa el modelo en español de spaCy, también debes descargarlo una vez con python -m spacy download es_core_news_sm.
import nltk
import spacy
from sklearn.feature_extraction.text import TfidfVectorizer
nltk.download("punkt")
nltk.download("punkt_tab")
texto = "OpenAI presento un nuevo modelo en San Francisco y luego lo llevo a Buenos Aires."
tokens = nltk.word_tokenize(texto, language="spanish")
print("Tokens NLTK:", tokens)
nlp = spacy.load("es_core_news_sm")
doc = nlp(texto)
print("Entidades spaCy:", [(ent.text, ent.label_) for ent in doc.ents])
vectorizador = TfidfVectorizer()
X = vectorizador.fit_transform([texto, "Buenos Aires es una ciudad con mucho talento tecnologico"])
print("TF-IDF shape:", X.shape)
Este programa tiene varias partes, y cada una cumple un objetivo distinto dentro del flujo:
import nltk importa NLTK para trabajar con tokenización, es decir, para separar el texto en palabras y signos.import spacy incorpora spaCy, que en este caso se usa para analizar el texto y detectar entidades nombradas.from sklearn.feature_extraction.text import TfidfVectorizer importa la clase que permite convertir textos en vectores numéricos con TF-IDF.nltk.download("punkt") y nltk.download("punkt_tab") descargan los recursos que NLTK necesita para poder tokenizar correctamente el texto en español.texto = ... define la oración de ejemplo sobre la que se aplicarán las distintas herramientas.nltk.word_tokenize(texto, language="spanish") divide la oración en tokens. El objetivo aquí es mostrar cómo NLTK separa palabras y signos de puntuación.print("Tokens NLTK:", tokens) muestra en pantalla el resultado de la tokenización para que se vea concretamente cómo quedó fragmentado el texto.spacy.load("es_core_news_sm") carga un modelo de spaCy entrenado para español. Sin este modelo, spaCy no puede realizar su análisis lingüístico.doc = nlp(texto) procesa la oración con spaCy y genera un objeto que contiene tokens, entidades, información gramatical y otros análisis posibles.[(ent.text, ent.label_) for ent in doc.ents] recorre las entidades detectadas por spaCy y muestra tanto el texto encontrado como su categoría.TfidfVectorizer() crea el vectorizador que transformará documentos de texto en representaciones numéricas basadas en frecuencia e importancia relativa de términos.fit_transform([...]) aprende el vocabulario a partir de las dos frases y genera la matriz TF-IDF correspondiente.print("TF-IDF shape:", X.shape) muestra el tamaño de la matriz obtenida. Eso permite ver cuántos documentos se procesaron y cuántos términos distintos fueron representados.Lo interesante del ejemplo es que ilustra tres objetivos diferentes dentro de NLP clásico: segmentar texto, extraer información lingüística y convertir documentos en vectores numéricos para usarlos en modelos posteriores.
Comprender el panorama de librerías de NLP en Python es importante porque permite ubicar cada herramienta en su contexto correcto. No todas hacen lo mismo ni están pensadas para el mismo tipo de problema, pero juntas forman un ecosistema muy potente para trabajar con lenguaje natural.
Con esta visión general ya podemos pasar a un terreno más concreto y empezar a trabajar con bibliotecas específicas.
En el próximo tema estudiaremos el procesamiento de texto con NLTK, una excelente puerta de entrada práctica para aplicar muchos de los conceptos que vimos hasta ahora.