Martin Rodrigo Morales
🚀 Initial release: Advanced Transformer Sentiment Analysis
5b6f681
# 🌐 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!