# 🌐 Interfaz Web - Transformer Sentiment Analysis Una interfaz web interactiva y moderna para demostrar las capacidades del proyecto de análisis de sentimientos con transformers. ## ✨ Características ### 🎯 **Demo Interactivo** - **Análisis individual**: Analiza texto en tiempo real - **Análisis por lotes**: Procesa múltiples textos simultáneamente - **Selección de modelo**: Cambia entre modelo pre-entrenado y fine-tuneado - **Visualización de probabilidades**: Gráficos de distribución de confianza ### 📊 **Visualización de Métricas** - **Curvas de entrenamiento**: Loss y accuracy por época - **Métricas de rendimiento**: Accuracy, F1-score, Loss - **Arquitectura del modelo**: Información detallada del transformer ### 🏗️ **Arquitectura del Sistema** - **Diagrama interactivo**: Flujo de datos desde input hasta predicción - **Stack tecnológico**: Tecnologías utilizadas en el proyecto - **Información del proyecto**: Características y capacidades ## 🚀 Uso Rápido ### **Opción 1: Servidor Web Integrado** ```bash # Desde el directorio raíz del proyecto python serve_web.py # Con opciones personalizadas python serve_web.py --port 8080 --no-browser ``` ### **Opción 2: Servidor Web Manual** ```bash # Navegar al directorio web cd web # Servir con Python python -m http.server 8080 # O con Node.js (si está instalado) npx serve -p 8080 ``` ### **Opción 3: Usar con API** ```bash # Terminal 1: Iniciar la API python -m src.api --host 127.0.0.1 --port 8000 # Terminal 2: Iniciar la interfaz web python serve_web.py --port 8080 ``` ## 🔧 Configuración ### **URLs y Endpoints** - **Interfaz Web**: `http://localhost:8080` - **API Backend**: `http://localhost:8000` - **API Docs**: `http://localhost:8000/docs` - **Health Check**: `http://localhost:8000/health` ### **Configuración de API** La interfaz se conecta automáticamente a la API en `http://127.0.0.1:8000`. Para cambiar: ```javascript // En web/app.js, línea 2 const API_BASE_URL = 'http://tu-servidor:puerto'; ``` ## 📱 Funcionalidades ### **1. Análisis de Texto Individual** - Input: Textarea para ingreso de texto - Output: Sentimiento detectado, confianza, gráfico de probabilidades - Ejemplos: Botón para generar textos de prueba ### **2. Análisis por Lotes** - Input: Múltiples textos (uno por línea) - Output: Lista de resultados + gráfico de distribución - Límite: 10 textos por lote (configurable) ### **3. Configuración del Modelo** - Selector de modelo: Pre-entrenado vs Fine-tuneado - Toggle de probabilidades: Mostrar/ocultar distribución - Estado de API: Conectado/Desconectado/Cargando ### **4. Métricas y Visualización** - Gráfico de entrenamiento: Loss y accuracy por época - Círculos de rendimiento: Métricas clave animadas - Información de arquitectura: Detalles del modelo ## 🎨 Diseño y UX ### **Características Visuales** - **Diseño responsive**: Adaptable a móviles y tablets - **Tema moderno**: Gradientes, sombras y animaciones - **Tipografía**: Inter font para legibilidad - **Iconos**: Font Awesome para iconografía consistente ### **Interactividad** - **Navegación suave**: Scroll automático entre secciones - **Estados de carga**: Spinners y overlays - **Feedback visual**: Colores para sentimientos positivos/negativos - **Animaciones**: Transiciones suaves en hover y click ### **Accesibilidad** - **Contraste adecuado**: Cumple estándares WCAG - **Navegación por teclado**: Enter para enviar, Tab para navegar - **Mensajes descriptivos**: Estados de error claros - **Responsive design**: Funciona en todos los dispositivos ## 🔗 Integración con Backend ### **Endpoints Utilizados** ```javascript // Health check GET /health // Modelo info GET /model/info // Predicción individual POST /predict POST /predict/probabilities // Predicción por lotes POST /predict/batch ``` ### **Manejo de Errores** - **API desconectada**: Modo demo con datos simulados - **Errores de red**: Mensajes informativos al usuario - **Timeout**: Reintentos automáticos - **Validación**: Verificación de input en frontend ## 📊 Datos de Demo Cuando la API no está disponible, la interfaz usa datos simulados: ```javascript // Análisis basado en palabras clave const positiveWords = ['good', 'great', 'excellent', 'amazing', 'love']; const negativeWords = ['bad', 'terrible', 'awful', 'hate', 'horrible']; // Confianza simulada basada en coincidencias confidence = 0.7 + (matches * 0.1); ``` ## 🛠️ Tecnologías ### **Frontend** - **HTML5**: Estructura semántica - **CSS3**: Flexbox, Grid, animaciones - **JavaScript ES6+**: Async/await, fetch API - **Chart.js**: Gráficos interactivos - **Font Awesome**: Iconografía ### **Backend Integration** - **Fetch API**: Comunicación con FastAPI - **JSON**: Intercambio de datos - **CORS**: Configuración cross-origin - **Error Handling**: Manejo robusto de errores ## 🔧 Personalización ### **Colores y Tema** ```css /* Variables principales en styles.css */ --primary-color: #667eea; --secondary-color: #764ba2; --success-color: #28a745; --danger-color: #dc3545; ``` ### **Configuración de API** ```javascript // Configuración en app.js const API_BASE_URL = 'http://127.0.0.1:8000'; const POLLING_INTERVAL = 5000; // ms ``` ### **Textos de Ejemplo** ```javascript // Personalizar ejemplos en app.js const exampleTexts = [ "Tu texto de ejemplo aquí", "Otro ejemplo personalizado" ]; ``` ## 📱 Responsive Breakpoints - **Mobile**: < 768px - **Tablet**: 768px - 1024px - **Desktop**: > 1024px Adaptaciones automáticas: - Navegación collapse en móvil - Grid responsive para métricas - Arquitectura vertical en pantallas pequeñas ## 🚀 Deployment ### **Servidor Web Local** ```bash # Desarrollo python serve_web.py --port 8080 # Producción simple python -m http.server 8080 --directory web ``` ### **Servidor Web Avanzado** ```bash # Con nginx (ejemplo de configuración) server { listen 80; root /path/to/transformer/web; index index.html; location /api/ { proxy_pass http://localhost:8000/; } } ``` ### **Docker** ```dockerfile FROM nginx:alpine COPY web /usr/share/nginx/html EXPOSE 80 ``` ## 🔍 Testing ### **Tests Manuales** 1. ✅ Conexión a API: Verificar estado en header 2. ✅ Análisis individual: Probar con textos positivos/negativos 3. ✅ Análisis por lotes: Múltiples textos simultáneos 4. ✅ Responsive: Redimensionar ventana 5. ✅ Navegación: Links y scroll suave ### **Tests Automatizados** (Futuro) ```javascript // Ejemplo con Jest/Cypress describe('Sentiment Analysis Interface', () => { it('should analyze text and show results', () => { cy.visit('http://localhost:8080'); cy.get('#text-input').type('Great movie!'); cy.get('#analyze-btn').click(); cy.get('#single-result').should('be.visible'); }); }); ``` ## 📈 Métricas de Uso La interfaz registra (localmente): - Textos analizados - Tiempo de respuesta - Errores de API - Patrones de uso ## 🎯 Próximas Mejoras - [ ] **Authentication**: Login y perfiles de usuario - [ ] **History**: Historial de análisis - [ ] **Export**: Descargar resultados en CSV/JSON - [ ] **Themes**: Modo oscuro/claro - [ ] **Real-time**: WebSocket para análisis en vivo - [ ] **Mobile App**: PWA o React Native - [ ] **Analytics**: Google Analytics integration - [ ] **A/B Testing**: Comparar diferentes modelos ## 🆘 Troubleshooting ### **Problemas Comunes** **Q: La API no se conecta** ```bash # Verificar que la API esté corriendo curl http://localhost:8000/health # Revisar CORS en app.js # Verificar puertos correctos ``` **Q: Los gráficos no se muestran** ```bash # Verificar Chart.js en consola del navegador # Comprobar dimensiones de canvas # Revisar datos en console.log ``` **Q: Estilos no se cargan** ```bash # Verificar ruta de styles.css # Comprobar servidor web corriendo # Revisar permisos de archivos ``` **Q: JavaScript no funciona** ```bash # Abrir DevTools (F12) # Revisar errores en Console # Verificar que app.js se carga correctamente ``` --- ## 🎉 ¡Disfruta de la Demo! La interfaz está diseñada para mostrar de forma atractiva y profesional las capacidades del proyecto de análisis de sentimientos con transformers. **¿Preguntas o mejoras?** ¡Experimenta con el código y personaliza según tus necesidades!