2026-09-22 — news-silo: filtro de boilerplate, fix HDBSCAN y The Atlantic

Contexto: corpus ML/AI (NYT+WaPo) con párrafos de módulos (newsletters, guías, relacionados) que ensuciaban el silo; además --epsilon muerto en HDBSCAN. Se filtró en extracción, se sumó The Atlantic (texto completo vía RSS) y se re-corrió el pipeline. Repo ~/nef/news-silo, cambios sin commitear.

cd ~/nef/news-silo
.venv/bin/python scrape_mlai.py --discover
.venv/bin/python scrape_mlai.py --fetch --sitio atlantic --metodo cookies
.venv/bin/python scrape_mlai.py --limpia-corpus
.venv/bin/python silo_medios.py --dir data > data/silo-temas.txt
.venv/bin/python infografia.py -s nyt,atlantic --dias 7 --estilo dark -o infografia.html
.venv/bin/python infografia.py -s nyt,atlantic --dias 7 --estilo luz -o infografia-luz.html

Qué se hizo

1. Filtro de boilerplate en la extracción (scrape_mlai.py)

  • Causa raíz (verificada con HTML real vía browser): los bloques repetidos no son cuerpo del artículo sino módulos de página: menús hamburger-pane, guías #styln-guide / [role=complementary], relacionados [data-testid=recirc-item], figure/figcaption (créditos).
  • Doble capa:
    • Exclusión de contenedores en el path browser (_JS_EXTRAE, selector RUIDO) y en el path cookies (_Parrafos, pila de ruido con tags vacíos).
    • Blacklist de párrafos (es_boilerplate): créditos (Image by, via Getty, for The New York Times), promos (Catch up on big news, See all newsletters, Apple Podcasts |), bios (is a Times reporter/columnist..., @nytimes.com) y disclosures (The New York Times has sued...).
    • limpia_texto: normaliza, deduplica y aplica la blacklist en ambos paths.
  • --limpia-corpus: aplica lo mismo al corpus ya capturado + descarta párrafos repetidos en >=3 docs (--min-docs), respaldo .bak, descarta docs <400 chars. Resultado: 836k → 711k chars, 699 párrafos fuera, 1 doc vaciado (stub de video).
  • Efecto: desapareció el TEMA basura de newsletter en silo-temas.txt.

2. Fix HDBSCAN en silo_medios.py

  • --epsilon se parseaba pero nunca llegaba a HDBSCAN; faltaba copy=True. Ahora: cluster_selection_epsilon=args.epsilon, copy=True, default 0.0 (NumPy 2.5.3 + sklearn 1.9.1 = bug sklearn#33219 con epsilon>0). Sin FutureWarning.

3. The Atlantic como fuente (scrape_mlai.py)

  • Su feed RSS trae el texto completo (sin paywall, sin navegador): 140 entradas indexadas, 31 artículos AI/tech bajados con 0 fallos (~316k chars).
  • SITIOS + 6 feeds (all, technology, business, science, health, politics); sin_utm() normaliza links; --sitio acepta atlantic.
  • Login/cookies quedan soportados pero no se necesitan.

Estado verificado

  • Corpus: 128 docs (NYT 87 · Atlantic 31 · WaPo 10); Atlantic sin boilerplate (0 párrafos repetidos, 0 promos al inicio).
  • Silo con 101 docs: TEMA 1 AI safety (12, NYT+Atlantic), TEMA 0 incidentes OpenAI (6), TEMA 2 China/Trump-Xi (6). Outliers 77 (eventos únicos).
  • --status: 128 artículos · pendientes 7 (3 WaPo en cola, sesión inactiva).

Bloqueo / pendiente

  • WaPo: la sesión del perfil muestra “Resubscribe” (suscripción/sesión inactiva) y requests ni conecta (timeout). Requiere --login manual y verificar la suscripción. Los 3 candidatos WaPo quedan en candidatos.jsonl para el próximo fetch.
  • Sin commitear en ~/nef/news-silo: scrape_mlai.py (boilerplate + Atlantic + limpia-corpus) y silo_medios.py (epsilon/copy).
  • ~/nef/nef-silo: mejora 7 (salud/alertas/topes/dry-run) terminada ayer y sin commitear; siguiente del plan es mejora 6 (c-TF-IDF / calidad de silos).

Actualización — WaPo off + dataviz reciente

  • WaPo desactivado sin borrar código: PRENSA_SITIOS (default nyt,atlantic); --discover, --fetch y --sitio respetan la lista. Reactivar con PRENSA_SITIOS=nyt,wapo,atlantic. Sus 3 candidatos fuera de candidatos.jsonl.
  • infografia.py: -s/--sitios (filtra medios), --dias N (ventana desde la fecha más nueva), plantillas sin hardcodear NYT×WaPo (medios_html/etiquetas/conteos) y títulos de tema con nombres propios (OpenAI, Anthropic…).
  • Dataviz reciente generada: 71 artículos NYT+Atlantic (ventana 09-16→09-22), 8 silos, 590k palabras → infografia.html/.png (dark) e infografia-luz.html/.png (editorial). Silos top: Anthropic/Amodei 18, OpenAI 17, Trump/safety 12.
  • Nota: los feeds de Atlantic incluyen piezas de archivo (2024/2026-07); por eso el filtro --dias es necesario para la vista “semana”.