File size: 8,389 Bytes
5b6f681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
# 🌐 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!