Escucha social política con fuentes abiertas (OSINT)
Cómo construí un sistema diario de escucha social para la política de Argentina y Brasil: qué fuentes abiertas recolecta, cómo clasifica tono y narrativas con Python y modelos de lenguaje, y qué cuidados de privacidad aplica.
Matías Gaglio ·
Read in EnglishOrdenar la conversación pública antes de interpretarla.
La información política abunda, pero está dispersa: notas de cientos de medios, comentarios en video, búsquedas, chequeos de datos y redes con lógicas distintas. Construí un sistema que todos los días recolecta esas fuentes abiertas, las normaliza y las convierte en indicadores agregados sobre unos cuarenta dirigentes de Argentina y Brasil: volumen de menciones, tono, narrativas dominantes, picos de atención y exposición a términos de riesgo reputacional.
El tablero es una herramienta de trabajo y no se publica en este sitio. Lo que sigue explica cómo funciona y qué tipo de lectura permite.
Solo fuentes abiertas y gratuitas.
Cada fuente tiene su propio recolector en Python, con reintentos, límites de velocidad y un registro del estado de cada corrida. Si una fuente falla, el resto sigue y el tablero lo informa.
Google News y RSS
Búsquedas por dirigente y por verificadores de datos, más feeds RSS de medios de todo el espectro, cada uno rotulado con su línea editorial.
YouTube Data API
Comentarios públicos de videos políticos recientes, por búsqueda temática y por canal.
Bluesky, Mastodon y Reddit
Publicaciones de APIs públicas que no exigen acceso privilegiado.
Google Trends, GDELT y Wikipedia
Interés de búsqueda, cobertura internacional y visitas a las páginas de cada dirigente como señales de atención.
De miles de textos a señales que se pueden explicar.
Recolectar
GitHub Actions corre el proceso todos los días y guarda los textos en una caché privada, fuera del repositorio público.
Clasificar
pysentimiento (modelos RoBERTuito y BERTweet sobre PyTorch) asigna tono, emoción y agresividad en español y portugués. Si el modelo no está disponible, hay diccionarios de respaldo que se pueden auditar.
Agrupar
TF-IDF y factorización NMF con scikit-learn detectan narrativas: grupos de términos que aparecen juntos y cómo cambia su participación día a día.
Alertar
Picos de volumen por puntaje z, términos de riesgo por dirigente y un índice simple de presión reputacional de 0 a 100.
El índice de presión combina cuatro componentes con pesos visibles: tono negativo, agresividad, términos de riesgo y aceleración del volumen. Prefiero una fórmula simple que cualquiera pueda reconstruir a un puntaje opaco que no se puede discutir.
Detectar mensajes casi idénticos sin acusar a nadie por error.
Para identificar posible actividad coordinada, el sistema compara publicaciones con n-gramas de caracteres y similitud coseno. Dos cuentas distintas que publican textos casi iguales (90% de similitud o más) en menos de una hora forman un vínculo en un grafo de NetworkX.
Una coincidencia aislada no alcanza, porque dos personas pueden copiar el mismo titular. Se exige que el mismo par de cuentas coincida en al menos dos mensajes distintos. En el período analizado no apareció ningún grupo que cumpliera ese criterio, y el tablero lo informa así en lugar de forzar un hallazgo.
Qué se puede leer con este enfoque.
| Narrativa detectada | Notas |
|---|---|
| Milei y Bullrich | 734 |
| Lula y Alckmin | 659 |
| El papa León XIV y Villarruel | 608 |
| La familia Bolsonaro | 579 |
| Kicillof, Máximo Kirchner y la provincia de Buenos Aires | 406 |
- Tono general: 22,5% negativo, 69,4% neutro y 8,1% positivo, clasificado con el modelo en las 4.216 notas.
- Picos: el 4 de noviembre el volumen superó en 3,2 desvíos estándar al promedio del período.
- Lectura cualitativa: el modelo separa temas, pero una misma frase puede ser apoyo, ironía o rechazo. Los hallazgos se revisan leyendo ejemplos antes de sacar conclusiones.
Publicar agregados, nunca personas.
- Textos fuera del repositorio: las publicaciones y comentarios viven en una caché temporal del flujo de trabajo; al repositorio solo llegan porcentajes y conteos.
- Autores seudonimizados: las cuentas se reemplazan por identificadores con hash antes del análisis.
- Fuentes legítimas: solo APIs públicas y datos abiertos, sin acceso a información privada.
- Trazabilidad: cada indicador conserva el enlace a la fuente pública que lo originó para poder verificarlo.