Universal Content Extractor
Un motor de extracción y agregación de noticias de múltiples fuentes: obtiene historias de periódicos en PDF, sitios web, RSS y redes sociales, para luego segmentarlas, agruparlas y clasificarlas en un feed personalizado, ejecutando cada paso del LLM de forma local.
01Visión general
Universal Content Extractor ingiere noticias públicas de fuentes muy diferentes (periódicos y revistas en PDF, la web abierta, feeds RSS/Atom y plataformas de redes sociales) y convierte ese gran flujo en un feed coherente, deduplicado, multilingüe y personalizado. La decisión de diseño definitiva: cada parte de la comprensión de texto y el reconocimiento de imágenes en la página se ejecuta en un modelo Gemma autoalojado en el servidor, por lo que procesar noticias a escala no cuesta nada en tarifas comerciales de API de LLM.
02El problema que resuelve
Agregar noticias a escala implica dos problemas difíciles a la vez: extraer contenido de formatos que se resisten (un periódico en PDF es un diseño, no una lista de artículos; un sitio web es código de marcado detrás de defensas anti-bots), y luego darle sentido al resultado en diferentes idiomas sin que se convierta en un muro de duplicados. Y hacer todo eso con modelos LLM comerciales haría que el costo por artículo fuera prohibitivo. Ejecutar un modelo local elimina ese límite; y dado que el contenido son noticias públicas, el enfoque es puramente el costo, no la privacidad de los datos.
Resultado: noticias procesadas a escala con una factura de modelo por artículo efectivamente de cero.
03Qué construimos
Extracción de múltiples fuentes
- Periódicos y revistas en PDF: segmentación por IA a través de un pipeline "Flash": extracción de texto con PyMuPDF, un segmentador incremental / por streaming, procesamiento de imágenes por página, procesamiento de páginas basadas en pliegos y detección de continuación de artículos en múltiples páginas para finlandés, sueco e inglés.
- Web scraping: selectores CSS más Playwright para páginas renderizadas con JavaScript.
- Feeds RSS / Atom.
- Redes sociales: X / Twitter, Facebook, Instagram y LinkedIn.
Antidetección
El scraping a escala sobrevive gracias a las defensas poco glamorosas: retrasos aleatorios, rotación de agentes de usuario, rotación de proxies, retroceso exponencial y un interruptor de circuito para retroceder limpiamente cuando una fuente pone resistencia.
Enriquecimiento y el feed
Una vez que el contenido ingresa, se enriquece: agrupación semántica por similitud del coseno (umbral ~0.75), vinculación multilingüe para que la misma historia en diferentes idiomas se conecte, generación de sinopsis por IA y clasificación de eventos. Luego, un feed personalizado aplica una clasificación multialgorítmica, deduplicación y preferencias del usuario.
LLM local
Un modelo Gemma autoalojado realiza toda la comprensión de texto y el reconocimiento de imágenes en la página de forma local (tanto la lectura como la comprensión), lo cual hace que procesar este volumen sea económicamente viable.
04Almacenamiento e interfaces
Los registros residen en PostgreSQL; los embeddings residen en una base de datos vectorial Milvus para la búsqueda semántica y la agrupación. Por encima se sitúan tres interfaces: un panel de administración, una REST API y una interfaz de usuario (UI) para el feed de noticias.
05Tecnología
06Puntos destacados
- Un pipeline PDF "Flash" que segmenta los diseños de periódicos y une artículos de múltiples páginas en FI / SV / EN.
- Ingesta web, RSS y redes sociales detrás de una capa antidetección completa: rotación, retroceso exponencial y un interruptor de circuito.
- Agrupación semántica y vinculación multilingüe para que una historia no se convierta en una docena de duplicados.
- Un feed personalizado con clasificación multialgorítmica, deduplicación y preferencias del usuario.
- Toda la comprensión de texto y el reconocimiento de imágenes en la página en un modelo Gemma local: cero tarifas comerciales de API de LLM a escala.
- PostgreSQL para registros, Milvus para búsqueda vectorial.