bgustscraper 0.2.0

Advanced semantic scraping engine with AI-driven compliance checks and legal terms validation
Documentation
# Método de Scraping 5: Extracción Estructurada Generativa Local (Qwen ONNX) 🔮📋

El objetivo final del scraping moderno no es simplemente almacenar páginas web enteras, sino extraer **datos estructurados limpios (JSON, Parquet)** listos para ser consumidos por bases de datos, APIs o data pipelines. `bgustscraper` logra esto de forma **100% local, offline y sin coste alguno** integrando un modelo de lenguaje de última generación optimizado para correr sobre la CPU del host: `Qwen2.5-0.5B-Instruct`.

---

## ⚙️ Principio de Funcionamiento

Cuando ejecutas una búsqueda con la bandera de extracción (`--extract "..."` / `-e "..."`), `bgustscraper` orquesta el siguiente flujo:

1. **Obtención y Compresión del Texto:** El sitio web es raspado (Playwright o Cloudscraper) y su contenido se comprime semánticamente utilizando el clustering K-Means a 12 oraciones esenciales.
2. **Preparación del Contexto y Prompt de Sistema:**
   * Se crea un prompt estructurado de sistema que fuerza al modelo a responder estrictamente en formato JSON válido.
   * Se añade el texto comprimido del sitio web como contexto de origen inalterable.
   * Se inyecta la consulta específica del usuario (ej: *"Extrae la tasa del dólar y euro, y la fecha de vigencia"*).
3. **Inferencia local ONNX CPU:**
   * El worker Node.js carga en memoria el modelo `onnx-community/Qwen2.5-0.5B-Instruct` cuantizado en precisión **Q4** (ocupando solo ~350MB de RAM/disco).
   * La inferencia se realiza de forma directa utilizando el motor nativo multi-hilo de **ONNX Runtime** para CPU.
   * Se configura una **temperatura ultrabaja (0.1)** para evitar respuestas creativas y asegurar la fidelidad de los datos.
4. **Limpieza y Parsea Estricto:**
   * El subproceso lee la respuesta en tiempo real.
   * Limpia posibles marcas de bloque de código de markdown (como ` ```json ` y ` ``` `).
   * Parsea de forma estricta el objeto JSON resultante.
   * Si el parser tiene éxito, guarda el archivo físico en `downloads/extraction_<timestamp>.json` y propaga los datos a la CLI en formato JSON estilizado.

---

## 🛠️ Código y Archivos Relacionados

* **Orquestación en Rust:** [src/semantic_extractor.rs]file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/src/semantic_extractor.rs y [src/main.rs]file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/src/main.rs.
* **Inferencia y Carga en Node.js:** [worker/index.js]file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/worker/index.js (uso de la biblioteca `@huggingface/transformers` v3).

---

## 💻 Ejemplo de Uso de la CLI

Para extraer las tasas de cambio de un portal financiero:

```bash
cargo run --release -p bgustscraper -- "https://www.bcv.org.ve" --extract "Extrae el valor de venta del Dólar (USD) y el Euro (EUR) con su fecha"
```

### Salida JSON Generada:
```json
{
  "USD": 36.45,
  "EUR": 39.12,
  "moneda": "VES",
  "fecha_vigencia": "2026-06-02"
}
```

---

## ⚖️ Ventajas y Desventajas

### Ventajas:
* **Privacidad Absoluta y Coste Cero:** No se envían datos confidenciales a APIs externas como OpenAI o Anthropic. Toda la inferencia es local y gratuita.
* **Consumo Increíblemente Bajo:** El modelo de 0.5B parámetros cuantizado en Q4 corre de forma fluida en micro-instancias en la nube o computadoras de escritorio estándar sin necesidad de tarjeta gráfica (GPU).
* **Fácil Integración:** Al entregar JSON puro estructurado, elimina la necesidad de escribir y mantener selectores CSS frágiles que se rompen cuando la estructura visual del sitio cambia mínimamente.

### Desventajas:
* **Capacidad de Razonamiento Acotada:** Al ser un modelo ultra-pequeño (500M de parámetros), no se le pueden delegar tareas de razonamiento lógico extremadamente complejas o traducciones masivas en el mismo paso.
* **Tiempo de Inferencia en CPU:** Puede tardar entre 2 y 5 segundos por inferencia en CPUs comerciales normales.