Código Python: medir el sentimiento de los titulares con un léxico propio

Código Python: medir el sentimiento de los titulares con un léxico propio
Quien lleva un negocio pequeño, un depósito o la contabilidad de una pyme vive rodeado de titulares: el índice sube con fuerza, el petróleo cae, el banco central deja la tasa quieta, una plataforma grande recibe una multa. Leerlos todos los días es rápido; anotar uno por uno si el tono suena bueno, malo o indiferente ya es un trabajo aparte, y un trabajo que se vuelve subjetivo en cuanto uno se distrae. Esta pieza resuelve eso con un programa de Python corto que mide el tono de treinta titulares y lo compara con una etiqueta escrita a mano. El resultado es honesto: la regla coincide en veintisiete de los treinta titulares y el programa muestra, sin maquillaje, los tres casos donde se equivoca. El ZIP trae el programa comentado en español, el archivo con los treinta titulares, la salida real de ejemplo y las instrucciones; no hay que instalar nada más, porque todo usa la biblioteca estándar de Python.
⬇ Descargar el código (ZIP)Aviso: esto es material educativo, y no es una recomendación de compra ni de venta de ningún activo. Los titulares y los precios de ejemplo están inventados y no son noticias reales; sirven solo para practicar. Los datos históricos se citan únicamente con fines de práctica. Un resultado pasado no garantiza nada en el futuro. Antes de invertir, consulte a un profesional autorizado.
Qué trae el ZIP
El paquete es pequeño y se puede revisar completo antes de ejecutarlo. Todo funciona sin conexión a internet, sin cuentas y sin registros de ningún tipo.
| Archivo | Qué es | Para qué sirve |
|---|---|---|
sentimiento_titulares.py | El programa, comentado línea por línea en español | Lee los titulares, los mide, los compara y guarda el resultado |
datos/titulares.csv | Los treinta titulares de ejemplo | Es la entrada del programa; se puede reemplazar por titulares propios |
salida_ejemplo.txt | La salida real, ya ejecutada | Para comparar con lo que usted obtenga en su computador |
LEEME.md | Las instrucciones del paquete | Los mismos pasos de este artículo, en versión corta |
Al ejecutarlo, el programa crea la carpeta salida y escribe dentro el archivo sentimiento.csv, que se abre directamente en Excel o en cualquier hoja de cálculo.
El archivo de entrada, columna por columna
| Columna | Ejemplo | Qué significa |
|---|---|---|
fecha | 2026-04-06 | El día del titular, en formato año-mes-día |
titular | El índice sube con fuerza y marca un nuevo récord de cierre | El texto completo del titular, tal como se leería en el periódico |
etiqueta | positivo | La clasificación escrita a mano: positivo, negativo o neutro |
La primera fila del archivo son los nombres de las columnas y el programa los usa tal cual: si usted renombra una columna, el programa deja de encontrarla. Puede pegar sus propios titulares en ese mismo archivo, uno por línea, y anotar en la tercera columna cómo los clasificaría usted a mano; esa columna es la que después sirve para medir si el lexicón acertó. Los titulares pueden llevar comas: el lector respeta el texto y no lo parte por la mitad. Con esta tabla ya tiene lo necesario para cambiar la carpeta de datos por la suya y practicar con titulares de su propio sector.
Qué hace el programa
El programa no adivina y no aprende: aplica una regla escrita en dos listas de palabras. Los pasos, en orden, son estos:
- Lee el archivo de titulares y separa las tres columnas: fecha, texto y etiqueta manual.
- Limpia cada titular: pasa el texto a minúsculas, quita tildes y signos de puntuación, y lo parte en palabras sueltas.
- Cuenta cuántas de esas palabras aparecen en la lista positiva y cuántas en la lista negativa.
- Calcula un puntaje entre menos uno y más uno: las positivas menos las negativas, dividido entre el total de coincidencias.
- Clasifica el puntaje con un umbral: por encima de cero coma diez es positivo, por debajo de menos cero coma diez es negativo, y en el medio es neutro.
- Compara esa clase con la etiqueta manual que traía el archivo y marca si acertó o no.
- Muestra en pantalla la tabla de los treinta titulares, el resumen de aciertos, los tres más positivos, los tres más negativos y la lista de los fallos.
- Guarda todo en un archivo de salida con números planos, listos para sumar y filtrar en la hoja de cálculo.
Cómo ejecutarlo
Hace falta Python 3.11 o superior, nada más. No se instalan librerías, no se pide correo ni tarjeta, y el programa no se conecta a internet en ningún momento.
- Descargue el ZIP con el botón verde de este artículo y descomprímalo en una carpeta, por ejemplo en el escritorio.
- Instale Python desde el sitio oficial si todavía no lo tiene, marcando la casilla que agrega Python al sistema durante la instalación.
- Abra la terminal del sistema: en Windows el símbolo del sistema o PowerShell; en Mac o Linux, la aplicación Terminal.
- Escriba
cd, un espacio y la ruta de la carpeta que descomprimió, y pulse Enter. - Escriba
python sentimiento_titulares.pyy pulse Enter.
Si aparece un mensaje que dice que el comando no se reconoce, cierre y vuelva a abrir la terminal, o instale Python de nuevo marcando la casilla de agregar al sistema. Si el mensaje dice que no encuentra el archivo de titulares, revise que la terminal esté abierta en la carpeta correcta: esa carpeta debe contener el programa y la carpeta datos. Si el programa se abre con doble clic, la ventana se cierra al terminar y usted no alcanza a leer el resultado; siempre es mejor ejecutarlo desde la terminal.
El código, explicado
El corazón del programa es un lexicón propio: un diccionario de bolsillo escrito a mano. Aquí no hay inteligencia artificial de ninguna clase, ni modelo entrenado, ni servicio en la nube. Son dos listas de palabras separadas por comas, una de tono bueno y otra de tono malo, y el programa solo reconoce las palabras que están dentro de ellas.
POSITIVAS = "sube,record,optimismo,solida,impulsa,recupera,crece,ganancia,ganancias,mejor,confianza,mejora,aprueba,dispara,rebota,oportunidad,compra,compras,maximos,aceleran".split(",")
NEGATIVAS = "cae,temor,temores,crisis,recesion,riesgo,preocupacion,incertidumbre,caida,desplome,perdidas,debil,debilita,alerta,multa,panico,minimos,baja,sancion,quiebra".split(",")
# # Por eso mismo falla: con la ironía y con cualquier palabra que no esté en la lista.
Cada lista trae veinte palabras y está escrita en minúsculas y sin tildes a propósito, porque el programa limpia el titular de la misma manera antes de comparar. Esa decisión tiene un precio: cualquier palabra que no esté en las listas no aporta nada, y un titular malo escrito con palabras nuevas se queda sin señal.
def contar(palabras: list[str]) -> tuple[int, int]:
"""Cuenta cuántas palabras del lexicón aparecen: las positivas y las negativas."""
positivas = sum(1 for palabra in palabras if palabra in POSITIVAS)
negativas = sum(1 for palabra in palabras if palabra in NEGATIVAS)
return positivas, negativas
El conteo es literal: recorre las palabras y suma uno por cada coincidencia. Después el puntaje divide la diferencia entre el total de coincidencias, para que un titular largo no gane solo por tener más texto. Con dos palabras positivas y una negativa, el puntaje queda en cero coma treinta y tres.
def clasificar(valor: Decimal) -> str:
"""Clasifica el puntaje con el umbral: positivo, negativo o neutro."""
if valor > UMBRAL:
return CLASE_POS # # Más positivas que negativas y por encima del umbral
if valor < -UMBRAL:
return CLASE_NEG # # Más negativas que positivas y por debajo del umbral
return CLASE_NEU # # Empatadas, o muy pocas palabras: no hay señal
La clasificación usa un umbral, no un cero exacto. Así, un empate entre una palabra buena y una mala cae en el medio y se marca como neutro, que es lo más prudente: cuando las señales se contradicen, el programa confiesa que no tiene nada que decir.
def trampas(filas: list[dict]) -> None:
"""Enseña dónde falla el lexicón y por qué (ironía y palabras fuera de la lista)."""
fallos = [fila for fila in filas if not fila["acierto"]]
print()
print("=" * ANCHO_LINEA)
print("DONDE EL LEXICÓN FALLA (A PROPÓSITO)")
print("=" * ANCHO_LINEA)
print("Este lexicón NO es inteligencia artificial: son dos listas de palabras escritas a mano.")
print("Falla con la IRONÍA: el mismo adjetivo puede sonar positivo dentro de un titular que en")
print("realidad es malo, y también falla con las palabras que no están en la lista.")
print("El taller dejó 3 titulares trampa a propósito para que se vea el fallo:")
print(f"Titulares donde el lexicón y la etiqueta manual no coinciden: {len(fallos)}")
for fila in fallos:
print(f" {fila['fecha']} etiqueta manual {fila['manual']} / lexicón dice {fila['clase']}"
f" {recortar(fila['titular'], 52)}")
Esta es la parte más honesta del taller: el programa no esconde sus fallos, los busca, los lista con su fecha y explica por qué ocurrieron. Una herramienta que informa dónde se equivoca es mucho más útil que una que solo muestra sus aciertos.
También conviene saber de dónde salen los datos reales que esta familia de talleres usa como referencia histórica de práctica: el bitcoin se descarga de CoinGecko, en api.coingecko.com, y el índice de la Reserva Federal de St. Louis, serie SP500, cuya dirección es https://fred.stlouisfed.org/series/SP500. Los dos archivos se descargaron el 2026-09-25 y se usan solo para practicar cálculos. En esta pieza el archivo de entrada son titulares inventados, no precios, y su formato es el de la tabla de arriba.
Qué vas a ver en pantalla
Lo primero que aparece es el aviso del programa y el tamaño de las dos listas. Enseguida viene la tabla de los treinta titulares, con el puntaje, la clase que calculó el lexicón, la etiqueta manual y una última columna que dice si acertó:
======================================================================================================================= SENTIMIENTO DE TITULARES Código Python didáctico · Kardex Tauro · kardex-tauro.muisca.co ======================================================================================================================= AVISO: material educativo. No es recomendación de compra ni de venta. Los titulares y los precios de ejemplo son INVENTADOS; los históricos se citan solo para practicar. Un resultado pasado no garantiza nada: consulta a un profesional autorizado. ----------------------------------------------------------------------------------------------------------------------- Titulares leídos: 30 Los 30 titulares de datos/titulares.csv son INVENTADOS para practicar: no son noticias reales. Palabras positivas (20): sube, record, optimismo, solida, impulsa, recupera, crece, ganancia, ganancias, mejor, confianza, mejora, aprueba, dispara, rebota, oportunidad, compra, compras, maximos, aceleran Palabras negativas (20): cae, temor, temores, crisis, recesion, riesgo, preocupacion, incertidumbre, caida, desplome, perdidas, debil, debilita, alerta, multa, panico, minimos, baja, sancion, quiebra Lexicón propio: dos listas escritas a mano (sin inteligencia artificial), pero falla con la ironía y con las palabras que no están en la lista.
Después del cuadro, el resumen deja las cuentas a la vista y comprueba que todo cuadre:
======================================================================================================================= RESUMEN ======================================================================================================================= Aciertos (el lexicón coincide con la etiqueta manual): 27 Fallos: 3 Porcentaje de acierto: 90,00 % aciertos + fallos = titulares leídos (30): CUADRA un titular sin palabras del lexicón da 0,00: CUADRA Titular de prueba: El mercado abre sin cambios y la bolsa se mantiene estable -> 0,00
Y al final llega la sección más valiosa del ejercicio, donde el programa se delata a sí mismo. Los tres titulares trampa que el taller dejó a propósito son estos:
======================================================================================================================= Este lexicón NO es inteligencia artificial: son dos listas de palabras escritas a mano. Falla con la IRONÍA: el mismo adjetivo puede sonar positivo dentro de un titular que en realidad es malo, y también falla con las palabras que no están en la lista. El taller dejó 3 titulares trampa a propósito para que se vea el fallo: Titulares donde el lexicón y la etiqueta manual no coinciden: 3 2026-05-25 etiqueta manual negativo / lexicón dice NEUTRO Pérdidas generalizadas: el índice borra las ganan... 2026-06-01 etiqueta manual negativo / lexicón dice NEUTRO Investigan a un fondo por presunto uso de informa... 2026-06-25 etiqueta manual neutro / lexicón dice POSITIVO El precio cae pero los analistas ven una oportuni...
Mírelos con calma, porque ahí está todo el límite de la idea. «Pérdidas generalizadas: el índice borra las ganancias del mes» es un titular claramente negativo para cualquier lector, pero el programa encuentra una palabra positiva y una negativa, las empata y concluye que el tono es neutro. «Investigan a un fondo por presunto uso de información privilegiada» tampoco trae ninguna palabra de las listas, así que pasa sin señal y queda como neutro. Y el error va también en la otra dirección: «El precio cae pero los analistas ven una oportunidad de compra» tiene dos palabras buenas y una mala, de modo que el programa lo llama positivo, aunque a mano lo hayamos etiquetado como neutro porque el titular muestra las dos caras de la noticia.
En números redondos: veintisiete aciertos de treinta, es decir, alrededor de noventa por ciento. Suena alto, y lo es para un puñado de palabras escritas a mano; pero no es magia, es aritmética, y los tres fallos que acaba de ver son los que aparecen siempre que el idioma se pone creativo.
Errores comunes y consejos
- Si la terminal dice que
pythonno se reconoce, en algunos equipos el comando se llamapyopython3: pruebe esas variantes antes de reinstalar nada. - Ejecute el programa desde la carpeta que descomprimió; si lo lanza desde otra carpeta, no encontrará el archivo de titulares.
- La columna de etiqueta manual no admite otras palabras: escriba siempre positivo, negativo o neutro, en minúsculas y sin tildes.
- No agregue columnas de más al archivo de entrada; si quiere guardar notas, déjelas en un archivo aparte.
- Si un titular queda como neutro y usted no está de acuerdo, revise primero si sus palabras están en la lista: casi todas las sorpresas vienen de ahí.
- El archivo de salida se sobrescribe cada vez que ejecuta el programa; si quiere conservar dos versiones, cambie el nombre del archivo antes de volver a correrlo.
- Trabaje con treinta o cuarenta titulares a la vez. Con muchos más, la revisión manual se vuelve pesada y las conclusiones se vuelven frágiles.
- Amplíe las listas con palabras de su propio sector, pero haga una copia antes de cambiarlas: así puede comparar el antes y el después sobre el mismo archivo de titulares.
Cuándo esto no alcanza
Un léxico hecho a mano es un buen punto de partida y una mala herramienta de decisión. Mide muy bien un vocabulario fijo y se pierde en cuanto el titular juega con el idioma. Además, los titulares no son inventario: no dicen cuántas unidades hay en la bodega ni cuánto costó la última compra, y ninguna lista de palabras va a cuadrar un saldo. Cuando el negocio crece, cuando hay varios depósitos, cuando hay que cruzar compras, ventas y existencias con la contabilidad, el paso siguiente no es otra lista de palabras sino un sistema de verdad. Kardex Tauro es gratis y ordena el inventario de una pyme sin obligarla a escribir código, y el software es la respuesta para cuando ya no alcanza con la hoja de cálculo ni con un script casero.
Aviso: conviene repetirlo, porque es lo más importante de esta página: esto es material educativo y no es una recomendación de compra ni de venta; los titulares de ejemplo están inventados y no son noticias reales; los datos históricos se citan solo para practicar y un resultado pasado no garantiza nada. La fuente de los datos reales, CoinGecko y la Reserva Federal de St. Louis con la serie SP500, queda citada arriba con su dirección visible, y el ZIP trae el descargo por escrito para que lo conserve junto al código. Antes de invertir, consulte a un profesional autorizado.
⬇ Descargar el código (ZIP)Descargue el paquete, ejecútelo primero con los titulares de ejemplo y después con los suyos: la parte más valiosa del ejercicio es descubrir las palabras que su lista todavía no conoce.