Este proyecto implementa un sistema completo para analizar trending topics sobre un flujo continuo de documentos.
El backend está desarrollado en C++ usando bloques temporales con el algortimo Space-Saving, y el frontend en Flask (Python).
Asegurese de tener esto previamente instalado:
- Python 3.9+
- pip
- g++ o clang++ con soporte C++17
- Make
- macOS o Linux
Si usa Windows, ejecutar en WSL2 (Ubuntu recomendado).
En la terminal, navegar hasta el directorio principal del proyecto y ejecutar:
chmod +x setup.sh
./setup.sh
Este script creará el entorno virtual en Python necesario para correr Flask e instalará todas sus dependencias necesarias.
Debe recibir el mensaje: Entorno instalado correctamente, eso indica que puede continuar.
En la terminal, navegar hasta el directorio principal del proyecto. Ejecutar:
chmod +x exeApp.command
./exeApp.command
Este script primero verifica que el entorno virtual de Python exista y esté activado, luego inicia automáticamente el backend en C++ y el servidor Flask en puertos separados. Si todo funciona correctamente, deberá tener dos terminales (frontend y backend) con los mensajes clave:
[Backend] Esperando conexiones en puerto 8081...indicando que el backend está activo.Running on http://127.0.0.1:8080indicando que la aplicación web Flask está levantada.
Si alguno de estos mensajes no aparece, significa que hubo un error en la ejecución.
Después de eso, solo accede a http://127.0.0.1:8080 y deberá visualizar la interfaz.
Si encontrara algún error en la ruta, modifique manualmente los comando para apuntar al directorio donde tenga almacenado el proyecto.
ProyectoFinal/
├── setup.sh
├── exeApp.command
│
├── backend/
│ ├── main.cpp
│ ├── Makefile
│ ├── gestorBloques/
│ ├── estructuras/
│
├── frontend/
│ ├── env/
│ ├── static/
│ ├── templates/
│ ├── preprocessign.py
│ ├── webapp.py
│ ├── wordCloud.py
|
├─── data/
│ ├── ins1/
│ ├── ins2/
│ ├── ins3/
│ └── ...
│
└── README.md
Importante: las rutas deben mantenerse exactamente así.
El sistema utiliza automáticamente las carpetas:
/data/ins1/
/data/ins2/
/data/ins3/
...
Cada carpeta contiene archivos .txt con noticias o documentos que serán preprocesados e insertados como un único bloque en el backend.
La aplicación avanzará secuencialmente: primero ins1, luego ins2, luego ins3, etc. Si una carpeta no existe, se detendrá el proceso de inserción.
Al presionar el botón Insertar, ocurre lo siguiente:
-
Selección automática del directorio
La aplicación detecta cuál es el siguiente directorioinsXdisponible.
Si ya se procesóins1, la siguiente inserción tomaráins2, y así sucesivamente. -
Lectura de archivos
Se procesan todos los.txtdentro de esa carpeta.
Se intenta leer cada archivo primero en UTF‑8, luego en ISO‑8859‑1.
Si ambos fallan, el archivo se omite sin detener la inserción. -
Preprocesamiento avanzado (en Python)
- limpieza de caracteres no deseados
- normalización
- tokenización
- eliminación de stopwords
- stemming / lematización
- reconstrucción segura de JSON
- límites automáticos para evitar strings rotos
El resultado es un listado de tokens completamente limpios y listos para el backend.
-
Envío al backend
Los tokens se envían por sockets al backend C++ con manejo de mensajes fragmentados.
El backend recibe los tokens, crea un nuevo bloque temporal y lo inserta al gestor. -
Actualización en la interfaz
Se mostrará:- cantidad de tokens enviados
- tiempo de preprocesamiento
- confirmación del backend
- ID del bloque creado
La interfaz cuenta con dos sliders (Inicio y Fin) que detallan la Ventana Temporal (bloques), simulando una línea de tiempo de cada inserción: selecciona cuántos bloques recientes incluir en la consulta.
Adicionalmente se tiene que ingresar K: tamaño del Top‑K solicitado
Y existen dos modos de uso:
El usuario mueve los sliders y presiona el botón Consultar.
La consulta se envía al backend y se muestra:
- tiempo de consulta
- listado de tópicos trending
- word cloud generada automáticamente
Si el usuario presiona el botón Fijar, los sliders quedan bloqueados.
Esto activa un comportamiento especial:
- cada vez que se inserte un nuevo bloque, se ejecutará automáticamente una consulta Top‑K
- la interfaz actualiza inmediatamente la tabla y la word cloud
Esta característica es útil para:
- demostraciones en tiempo real
- monitoreo continuo
- análisis de streams simulados
- se genera automáticamente después de cada consulta
- utiliza el conteo real proveniente de la ventana seleccionada
- se guarda temporalmente y se muestra en la interfaz sin necesidad de recargar la página
Para ver más detalles sobre la lógica y el funcionamiento interno del producto, revisar el informe detallado.
- Backend → puerto 8081
- Frontend → puerto 8080
El lector intenta:
- UTF‑8
- ISO‑8859‑1
- Si falla el archivo es omitido
- Reconstrucción de JSON fragmentado
- Saltar archivos corruptos
- Diccionario con HashMap dinámico
- Validación de carpetas
Backend no recibe datos Asegurar que el backend corre en 8081.
Connection reset by peer El backend se cerró durante el envío.
Tokens cortados Corregido con el acumulador de JSON.
Valores “undefined” Frontend no recibió JSON válido.
Proyecto académico para evaluación en la Universidad Católica San Pablo.