Silo de medios — tópicos semánticos sobre Twitter + prensa (BERTopic-lite)
Fecha: 2026-09-17
Qué se hizo
~/nef/news-silo/silo_medios.py (nuevo): embeddings Qwen3-Embedding-0.6B +
HDBSCAN + c-TF-IDF sobre el corpus de medios de SPAB
(~/nef/estado_turismo/spab-retrieval/data/corpus/*.jsonl, 430 docs Twitter+prensa).
Cubre RUTA §5.2.3 (modelado de tópicos), sustituyendo la pasada léxica
(sentimiento_corpus.py) por agrupación semántica.
Resultado
16 temas · 276 outliers (64%).
Temas que importan al plan
- Bacalar → “Aeropuerto de Chetumal amplía nombre para incluir Bacalar” (T4, 8/8 docs de Bacalar): el emergente buscando visibilidad — coincide con su rol de receptor.
- Tulum/Cancún/Playa → clima extremo (T1), bloqueos viales (T9), asaltos (T13): el saturado con fricción.
- Sargazo / aguas residuales (T12) cruza el Caribe (Cancún, Bacalar, Playa, Tulum): la señal ambiental del plan.
- Ruido nacional tangencial: Dr. Simi (T0), “Grito” 15-sept (T8), Sheinbaum (T5).
Hallazgos de calidad (importantes)
- 64% outliers + un clúster de spam tipo “saludos desde X, manda pv” (T14).
- El retriever
corpus_social.pyusaqueryType: "Latest"→ atrapa engagement-spam y noticias nacionales que mencionan el destino de paso. - Falta filtro de calidad: longitud mínima, descartar saludos/replies, umbral de relevancia (p. ej. el nombre del destino en título/lead, no solo mención).
Filtro añadido (mismo día, segunda pasada)
silo_medios.py ahora limpia en ingesta: strip de URLs/mentions/hashtags, longitud
mínima 25, blacklist de spam/engagement (saludos, “manda pv”, “me encantó tu video”,
“suscríbete”, etc.) y dedup por texto normalizado.
- Social (Twitter+prensa): 430 → 375 docs, 12 temas limpios (el clúster de “saludos” desapareció). Descarte: 43 dup + 6 spam + 6 cortos.
- Tema nuevo relevante: “Cancún, Puerto Vallarta y Los Cabos pierden turistas en verano 2026 — sargazo, superpeso, inseguridad, falta de vuelos” → validación externa de la narrativa de saturación/colapso del plan.
YouTube (capa de voz): señal baja para tópicos
- 2,886 comentarios → tras filtro 2,382 docs, pero HDBSCAN colapsa en 1 solo clúster genérico (top terms: “video, no, gracias, yo, mi”). Los comentarios son mayormente engagement (“me encantó tu video”, “mil gracias”).
- Tienen señal de SENTIMIENTO real (Tulum: “víctima de su propia avaricia”, “taxis elevadísimos”; Bacalar: fondas, tren Maya) pero diluida.
- Decisión: YouTube se usa como capa de sentimiento (léxico, ya en
sentimiento_corpus.py), NO para modelado de tópicos. Mezclarlo con social hunde el clustering (la masa genérica domina).
Siguiente
- Evolución temporal del tópico “precio” (el plan lo pide) → el corpus ya tiene
fecha; falta agrupar por mes (sobre la capa social limpia, no YouTube). - YouTube como sentimiento: correr
sentimiento_corpus.pypor destino y reportar el diferencial emergente vs consolidado (Tulum “avaricia” vs Bacalar “comida/budget”).