refactor: reorganizar docs y pocs bajo INFO/
- docs/ → INFO/DOCS/CONTEXT/ (documentación técnica en markdown) - FLUJOS/DOCS/ + FLUJOS_DATOS/DOCS/ → INFO/DOCS/ (txts de arquitectura) - POCS/ → INFO/POCS/ (pruebas de concepto) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
83f67b76b4
commit
954f47996f
33 changed files with 0 additions and 0 deletions
223
docs/MONGODB.md
223
docs/MONGODB.md
|
|
@ -1,223 +0,0 @@
|
|||
# MongoDB — Contexto técnico FLUJOS
|
||||
**Fecha:** 2026-04-21
|
||||
**Instancia:** `mongodb://localhost:27017` (solo localhost, no expuesto)
|
||||
**Base de datos:** `FLUJOS_DATOS`
|
||||
|
||||
---
|
||||
|
||||
## Colecciones y esquema
|
||||
|
||||
### `wikipedia`
|
||||
Artículos scrapeados de la API de Wikipedia por temas.
|
||||
|
||||
```json
|
||||
{
|
||||
"_id": ObjectId,
|
||||
"archivo": "Nombre_del_articulo.txt", // UNIQUE INDEX — clave de dedup
|
||||
"tema": "guerra global",
|
||||
"subtema": "alianzas militares",
|
||||
"texto": "Contenido completo del artículo...",
|
||||
"fecha": ISODate | null
|
||||
}
|
||||
```
|
||||
|
||||
### `noticias`
|
||||
Artículos scrapeados de ~90 medios internacionales (ver scraper de noticias).
|
||||
|
||||
```json
|
||||
{
|
||||
"_id": ObjectId,
|
||||
"archivo": "titulo-noticia.txt", // UNIQUE INDEX
|
||||
"tema": "guerra global",
|
||||
"subtema": "conflictos internacionales",
|
||||
"texto": "Texto limpio de la noticia...",
|
||||
"fecha": ISODate | null
|
||||
}
|
||||
```
|
||||
|
||||
### `torrents`
|
||||
Documentos de WikiLeaks y otros torrents de documentos filtrados.
|
||||
|
||||
```json
|
||||
{
|
||||
"_id": ObjectId,
|
||||
"archivo": "documento.pdf.txt", // UNIQUE INDEX
|
||||
"tema": "...",
|
||||
"subtema": "...",
|
||||
"texto": "...",
|
||||
"fecha": ISODate | null
|
||||
}
|
||||
```
|
||||
|
||||
### `imagenes`
|
||||
Imágenes analizadas por Qwen3-VL-8B. Solo se crea un doc cuando el modelo ha generado descripción.
|
||||
|
||||
```json
|
||||
{
|
||||
"_id": ObjectId,
|
||||
"archivo": "cambio_climatico_003.jpg", // UNIQUE INDEX
|
||||
"image_path": "/var/www/.../IMAGENES/output/wiki_images/cambio_climatico/cambio_climatico_003.jpg",
|
||||
"tema": "cambio climático",
|
||||
"subtema": "calentamiento global",
|
||||
"texto": "descripción generada por Qwen3-VL...",
|
||||
"keywords": ["glaciar", "deshielo", "ártico"],
|
||||
"fecha": ISODate("2026-04-21")
|
||||
}
|
||||
```
|
||||
|
||||
### `imagenes_wiki`
|
||||
Imágenes scrapeadas de Wikipedia SIN análisis Qwen. Fallback cuando `imagenes` no tiene el doc.
|
||||
|
||||
```json
|
||||
{
|
||||
"_id": ObjectId,
|
||||
"archivo": "cambio_climatico_003.jpg", // UNIQUE INDEX
|
||||
"image_path": "/var/www/.../output/wiki_images/cambio_climatico/cambio_climatico_003.jpg",
|
||||
"image_url": "https://upload.wikimedia.org/...",
|
||||
"tema": "cambio climático",
|
||||
"subtema": "glaciares árticos",
|
||||
"descripcion_wiki": "Descripción Wikimedia del fichero",
|
||||
"articulo_titulo": "Calentamiento global",
|
||||
"fecha": ISODate("2026-04-21")
|
||||
}
|
||||
```
|
||||
|
||||
### `comparaciones`
|
||||
Pares de documentos con su similitud calculada. ~52M documentos existentes.
|
||||
|
||||
```json
|
||||
{
|
||||
"_id": ObjectId,
|
||||
"noticia1": "Nombre_articulo_A.txt",
|
||||
"noticia2": "Nombre_articulo_B.txt",
|
||||
"porcentaje_similitud": 23.45 // float, % de palabras compartidas
|
||||
}
|
||||
```
|
||||
|
||||
**IMPORTANTE:** Esta colección NO tiene índice único porque los 52M docs existentes pueden tener duplicados. Las escrituras usan `update_one(..., upsert=True)` por `(noticia1, noticia2)`.
|
||||
|
||||
### `pipeline_log`
|
||||
Estado de ejecución del pipeline maestro. Un doc por ejecución de fase.
|
||||
|
||||
```json
|
||||
{
|
||||
"_id": ObjectId,
|
||||
"fase": "scraping" | "analisis" | "comparacion",
|
||||
"estado": "en_progreso" | "completado" | "error",
|
||||
"inicio": ISODate,
|
||||
"fin": ISODate | null,
|
||||
"stats": {
|
||||
"wikipedia_nuevos": 15,
|
||||
"noticias_nuevos": 230,
|
||||
"imagenes_wiki_nuevas": 60
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Índices únicos
|
||||
|
||||
Creados automáticamente por `pipeline_maestro.py::setup_indices()`:
|
||||
|
||||
```
|
||||
wikipedia.archivo UNIQUE ASC
|
||||
noticias.archivo UNIQUE ASC
|
||||
imagenes.archivo UNIQUE ASC
|
||||
imagenes_wiki.archivo UNIQUE ASC
|
||||
```
|
||||
|
||||
El campo `archivo` es el nombre del fichero (ej: `"Guerra_del_Golfo.txt"`). Es la clave de deduplicación en todos los upserts.
|
||||
|
||||
---
|
||||
|
||||
## Volumen aproximado (2026-04-21)
|
||||
|
||||
| Colección | Docs aprox. | Tamaño |
|
||||
|---|---|---|
|
||||
| wikipedia | ~5.000 | ~50 MB texto |
|
||||
| noticias | ~20.000 | ~200 MB texto |
|
||||
| torrents | ~500 | ~10 MB |
|
||||
| imagenes | ~150 | 1 MB (solo metadatos) |
|
||||
| imagenes_wiki | ~500 | 2 MB |
|
||||
| comparaciones | ~52.000.000 | ~3.2 GB |
|
||||
| pipeline_log | <100 | <1 MB |
|
||||
|
||||
---
|
||||
|
||||
## Consultas frecuentes desde la API
|
||||
|
||||
### Query de nodos (FLUJOS_APP.js línea 67–94)
|
||||
```javascript
|
||||
// Filtro base
|
||||
{ tema: "guerra global", subtema: "...", texto: { $regex: "...", $options: 'i' } }
|
||||
|
||||
// Con fechas
|
||||
{ ..., fecha: { $gte: new Date("2024-01-01"), $lte: new Date("2024-12-31") } }
|
||||
```
|
||||
|
||||
### Query de enlaces (línea 147–155)
|
||||
```javascript
|
||||
{
|
||||
porcentaje_similitud: { $gte: 20.0 },
|
||||
noticia1: { $in: [...nodeIds] },
|
||||
noticia2: { $in: [...nodeIds] }
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Conexión desde Node.js
|
||||
|
||||
```javascript
|
||||
// FLUJOS_APP.js
|
||||
const mongoUrl = process.env.MONGO_URL || 'mongodb://localhost:27017';
|
||||
const dbName = process.env.DB_NAME || 'FLUJOS_DATOS';
|
||||
const client = new MongoClient(mongoUrl);
|
||||
await client.connect();
|
||||
const db = client.db(dbName);
|
||||
```
|
||||
|
||||
Configuración en `.env`:
|
||||
```
|
||||
MONGO_URL=mongodb://localhost:27017
|
||||
DB_NAME=FLUJOS_DATOS
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Conexión desde Python
|
||||
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
client = MongoClient('mongodb://localhost:27017', serverSelectionTimeoutMS=5000)
|
||||
db = client['FLUJOS_DATOS']
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Temas definidos en el sistema
|
||||
|
||||
Los temas son etiquetas fijas asignadas durante el scraping/tokenización:
|
||||
|
||||
```
|
||||
"guerra global" → subtemas: conflictos internacionales, guerras civiles, terrorismo, armas, alianzas militares
|
||||
"inteligencia y seguridad"→ subtemas: inteligencia, ciberseguridad, espionaje, seguridad nacional, contraterrorismo
|
||||
"cambio climático" → subtemas: cambio climático, desastres naturales, conservación, energía renovable, escasez de agua
|
||||
"demografía y sociedad" → subtemas: sobrepoblación, enfermedades, migraciones, urbanización, despoblación rural
|
||||
"economía y corporaciones"→ subtemas: economía global, corporaciones multinacionales, comercio internacional, organismos financieros, desigualdad económica
|
||||
"otros" → documentos que no encajan en ningún tema
|
||||
```
|
||||
|
||||
La asignación la hace `pipeline_completo.py::asignar_tema_y_subtema()` buscando palabras clave en el texto.
|
||||
|
||||
---
|
||||
|
||||
## Ruta del dato físico
|
||||
|
||||
```
|
||||
MongoDB FLUJOS_DATOS
|
||||
└── imagenes_wiki / imagenes
|
||||
└── image_path → /var/www/theflows.net/flujos/FLUJOS_DATOS/IMAGENES/output/wiki_images/{tema_slug}/{archivo}
|
||||
servido como → https://theflows.net/wiki-images/{tema_slug}/{archivo}
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue