Procesamiento de lenguaje natural (NLP) básico en español
El procesamiento de lenguaje natural (NLP) es la rama de la IA que trata con texto humano. En esta lección haces 3 cosas útiles para una pyme: cuentas palabras clave, filtras palabras vacías y detectas el tono de una reseña.
Qué vas a construir
- Un contador de palabras frecuentes (sin librerías raras, solo Python puro).
- Un filtro de "stop words" en español para quedarte solo con palabras significativas.
- Un analizador de tono (positivo / negativo / neutro) de reseñas usando Claude/OpenAI.
1. Contar palabras frecuentes
Imagina que tienes las reseñas de un restaurante y quieres saber de qué hablan los clientes. Crea contar_palabras.py:
from collections import Counter
import re
resenas = """
La comida estaba buenísima, el servicio rápido y el local muy acogedor.
Los precios son justos para la calidad. Volveré con la familia seguro.
El servicio fue lento y la comida llegó fría. No volveré.
Comida espectacular, ambiente acogedor y trato del personal excelente.
Local pequeño pero la comida lo compensa todo. Repetiremos.
"""
# Convertir a minúsculas y extraer solo palabras (sin puntuación)
palabras = re.findall(r"\b[a-záéíóúñ]+\b", resenas.lower())
# Contar frecuencias
contador = Counter(palabras)
# Top 10
print("Las 10 palabras más usadas en las reseñas:")
for palabra, n in contador.most_common(10):
print(f" {n:>3}× {palabra}")
Ejecútalo: python contar_palabras.py. Verás algo como:
Las 10 palabras más usadas en las reseñas:
5× la
4× y
4× el
3× comida
2× servicio
...
Problema: las palabras más frecuentes son la, el, y, de. Son palabras "vacías" que no aportan información útil. Hay que filtrarlas.
2. Filtrar stop words en español
Las "stop words" son palabras tan comunes que no aportan sentido por sí solas. Filtra usando una lista:
STOP_WORDS_ES = {
"el", "la", "los", "las", "un", "una", "unos", "unas",
"y", "o", "pero", "porque", "que", "qué", "como", "cómo",
"de", "del", "a", "al", "en", "con", "sin", "por", "para",
"es", "son", "fue", "fueron", "está", "están", "ser", "estar",
"me", "te", "se", "nos", "os", "le", "les", "mi", "tu", "su",
"no", "sí", "también", "tampoco", "muy", "más", "menos",
"lo", "todo", "todos", "toda", "todas", "esto", "esta", "este",
}
# (Reusa el código anterior y filtra)
palabras_significativas = [p for p in palabras if p not in STOP_WORDS_ES and len(p) > 2]
contador = Counter(palabras_significativas)
print("Top 10 palabras significativas:")
for palabra, n in contador.most_common(10):
print(f" {n:>3}× {palabra}")
Ahora sí: comida, servicio, acogedor, volveré, etc. De aquí puedes sacar insights de negocio reales.
3. Analizar el tono de una reseña con IA
Contar palabras está bien, pero no detecta sarcasmo ni contexto. Para eso vamos a delegar el análisis de tono a la IA. Crea tono_resenas.py:
import anthropic
import json
client = anthropic.Anthropic()
resenas = [
"La comida estaba buenísima y el servicio rápido. Volveré seguro.",
"El servicio fue lento y la comida llegó fría. No volveré.",
"Estuvo bien, sin más. Ni espectacular ni malo.",
"Buenísimo, claro... si te gusta esperar 1 hora por una pizza fría.", # sarcasmo
]
def detectar_tono(texto: str) -> dict:
"""Devuelve dict con 'tono' (positivo/negativo/neutro) y 'razon'."""
respuesta = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=200,
messages=[{
"role": "user",
"content": f"""Analiza el tono de esta reseña. Responde SOLO con JSON válido con dos claves:
- "tono": "positivo", "negativo" o "neutro"
- "razon": breve explicación (máx 15 palabras)
Reseña: "{texto}"
"""
}]
)
# Extraer JSON de la respuesta
return json.loads(respuesta.content[0].text)
for resena in resenas:
resultado = detectar_tono(resena)
icono = {"positivo": "✅", "negativo": "❌", "neutro": "➖"}.get(resultado["tono"], "❓")
print(f"{icono} [{resultado['tono'].upper()}] {resena}")
print(f" → {resultado['razon']}\n")
Resultado esperado:
✅ [POSITIVO] La comida estaba buenísima y el servicio rápido. Volveré seguro.
→ Cliente satisfecho, valora comida y rapidez, expresa intención de volver
❌ [NEGATIVO] El servicio fue lento y la comida llegó fría. No volveré.
→ Cliente insatisfecho, queja por servicio y comida fría
➖ [NEUTRO] Estuvo bien, sin más. Ni espectacular ni malo.
→ Reseña tibia, sin entusiasmo ni queja clara
❌ [NEGATIVO] Buenísimo, claro... si te gusta esperar 1 hora por una pizza fría.
→ Sarcasmo evidente, queja sobre tiempo de espera y comida fría
Lo importante: la IA detectó el sarcasmo de la última reseña, algo que un sistema de reglas o de "palabras positivas/negativas" no podría.
Caso de uso real para pymes
Combinando los 3 ejercicios puedes ofrecer a un restaurante, clínica o tienda:
- Una nube de palabras con los temas más mencionados en sus reseñas Google.
- Un dashboard con el % de reseñas positivas / negativas / neutras por mes.
- Alertas automáticas si en una semana hay un pico de reseñas negativas.
Eso es producto vendible. No es ciencia ficción: son las 100 líneas de Python que acabas de leer.
Checklist antes de marcar completada
- Has corrido el contador de palabras frecuentes con y sin stop words.
- Has corrido el analizador de tono con las 4 reseñas de ejemplo.
- Verificas que la IA detectó el sarcasmo de la última reseña.
- Tienes una idea de al menos un caso de uso real donde aplicar esto.
Última lección: te dejo el mapa de qué aprender después y proyectos concretos para practicar tú solo. Y después, descargas tu certificado.
📝 Comprueba lo aprendido
Responde estas 4 preguntas y acierta al menos el 60% para desbloquear el botón "Marcar como completada".