rust_scraper 1.0.0

Production-ready web scraper with Clean Architecture, TUI selector, and sitemap support
Documentation
## 1. Contexto y Motivación

Actualmente, la limpieza de contenido en **Rust Scraper** depende de selectores CSS manuales y heurísticas de densidad de texto. Este enfoque es frágil ante cambios en el DOM y a menudo incluye "ruido" (menús de navegación, footers, scripts, imágenes base64) que degrada la calidad de los datasets para RAG.

Para elevar la calidad de los datos a un estándar de producción en 2026, implementaremos una capa de inferencia local utilizando **Small Language Models (SLMs)**. Esto permitirá clasificar bloques de contenido semánticamente y extraer únicamente el texto relevante, optimizando el uso de hardware local (AVX2).

## 2. Objetivos Principales

*   **Limpieza Semántica:** Clasificar bloques de contenido (chunks) mediante inferencia local para filtrar ruido visual y estructural.
*   **Optimización de Hardware:** Exprimir las capacidades de instrucciones **AVX2** del sistema host mediante el motor `tract-onnx`.
*   **Privacidad Total:** Procesamiento 100% local; ningún dato del scraping sale de la máquina del usuario.

## 3. Especificaciones Técnicas

*   **Modelo:** `all-MiniLM-L6-v2` (formato ONNX).
*   **Motor de Inferencia:** `tract-onnx` (100% Rust, nativo).
*   **Tokenización:** `tokenizers` (HuggingFace).
*   **Arquitectura:** Implementación del trait `SemanticCleaner` en la capa de Dominio.
*   **Caché de Modelos:** Descarga automática y persistencia en `~/.cache/rust-scraper/ai_models/`.

## 4. Diseño Arquitectónico (Clean Architecture)

*   **Domain:** Definir el trait `SemanticCleaner` y los tipos de error `CleanerError`.
*   **Infrastructure:** Implementar el motor de inferencia (`MiniLmCleaner`) utilizando `tract`.
*   **Adapters:** Integrar el flag `--clean-ai` en la CLI y el indicador visual `[AI Processing]` en la TUI.

## 5. Plan de Implementación (Task List)

- [ ] **Fase 1: Integración de IA**
    - [ ] Añadir `tract-onnx`, `tokenizers` y `hf-hub` al `Cargo.toml`.
    - [ ] Implementar el cargador de modelos con soporte para caché local.
- [ ] **Fase 2: Algoritmo de Segmentación**
    - [ ] Crear un parser que divida el HTML en "chunks" semánticos manteniendo la jerarquía del DOM.
- [ ] **Fase 3: Lógica de Inferencia**
    - [ ] Implementar la función de tokenización y paso por el modelo ONNX.
    - [ ] Implementar la lógica de filtrado basada en umbrales de relevancia semántica.
- [ ] **Fase 4: Optimización de Rendimiento**
    - [ ] Asegurar que el pipeline de inferencia sea asíncrono y no bloquee el hilo principal.
    - [ ] Documentar la compilación optimizada (`-C target-cpu=haswell`) para maximizar AVX2.

## 6. Criterios de Aceptación (QA)

1.  **Calidad:** El comando `./rust_scraper --url <url> --clean-ai` genera un Markdown limpio, libre de menús, footers y ruido estructural.
2.  **Rendimiento:** El tiempo de procesamiento por página no aumenta más de 100ms respecto al modo estándar.
3.  **Eficiencia:** El footprint de memoria total (incluyendo el modelo cargado) no excede los 150MB.
4.  **Resiliencia:** El modelo se descarga y verifica automáticamente; si la red falla, el sistema informa claramente sin entrar en pánico.
5.  **Testing:** 100% de cobertura en la nueva capa de infraestructura de IA.

---

## Notas para el desarrollador:

*   Recuerda implementar el `panic_hook` en la TUI si esta feature se activa junto con el modo interactivo.
*   Prioriza el uso de `mmap` para cargar el modelo ONNX desde el disco, esto reducirá drásticamente el tiempo de inicio en sistemas con HDD.
*   La limpieza determinista (eliminar `data:image/` y `<script>`) debe ocurrir ANTES de la inferencia para ahorrar ciclos de CPU.