ValorSentimental / README.md
iagofp's picture
chore: configurar despliegue en HF Spaces
5a2a43a
---
title: Valor Sentimental
emoji: 🎬
colorFrom: indigo
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
---
# Valor Sentimental
Valor Sentimental es una aplicacion web de recomendacion de peliculas basada en el estado emocional del usuario. El sistema analiza un texto escrito por la persona, identifica su emocion dominante y recomienda peliculas teniendo en cuenta su historial, sus valoraciones y distintas estrategias de exploracion o zona de confort.
El proyecto combina un backend en Flask, una interfaz en Vue 3 con Vuetify, una base de datos SQLite local y datos de MovieLens para construir el catalogo de peliculas.
## Caracteristicas principales
- Analisis emocional de texto en espanol mediante `pysentimiento/robertuito-emotion-analysis`.
- Recomendacion de peliculas segun emocion, historial y calidad global.
- Tres estrategias de recomendacion (`v1`, `v2`, `v3`) implementadas con patron Strategy.
- Registro, login, logout, cambio de contrasena y eliminacion de cuenta.
- Historial de peliculas vistas con valoracion de 1 a 5.
- Seguimiento emocional antes y despues de ver una recomendacion.
- Onboarding inicial para indicar peliculas ya vistas.
- Busqueda de peliculas y listado de populares usando MovieLens.
- Obtencion opcional de posters mediante OMDb.
- Persistencia local en SQLite.
## Tecnologias
### Backend
- Python
- Flask
- Flask-CORS
- SQLite
- Transformers
- PyTorch
- Hugging Face Inference Providers
- OMDb API opcional
### Frontend
- Vue 3
- Vue Router
- Vuetify
- Vite
- Sass
- Material Design Icons
### Datos
- MovieLens `ml-latest`
## Estructura del proyecto
```text
ValorSentimental/
|-- backend/
| |-- aplicacion.py # Rutas Flask y configuracion principal de la API
| |-- main.py # Punto de entrada del servidor
| |-- base_datos.py # Creacion de tablas SQLite
| |-- conexion_bd.py # Singleton de conexion a BD
| |-- config.py # Constantes, rutas y variables de entorno
| |-- dao/ # Acceso a datos
| `-- services/ # Logica de analisis, recomendacion y chatbot
|-- chatbot/
| |-- src/ # Aplicacion Vue
| |-- package.json
| `-- vite.config.js
|-- data/
| |-- ml-latest/ # CSV de MovieLens
| |-- procesado/ # Datasets procesados
| |-- download_movielens_large.py
| `-- script.py # Generacion del dataset emocional
|-- docs/ # Diagramas y documentacion auxiliar
|-- DIAGRAMAS_PATRONES.md # Patrones y arquitectura
|-- requirements.txt
`-- README.md
```
## Requisitos previos
- Python 3.10 o superior recomendado.
- Node.js 18 o superior recomendado.
- npm.
- Conexion a internet en el primer arranque si el modelo de Hugging Face no esta descargado localmente.
## Variables de entorno
El backend carga variables desde `backend/.env`.
Crea un archivo `backend/.env` con el siguiente contenido si quieres activar las funciones externas:
```env
HF_TOKEN=tu_token_de_huggingface
OMDB_API_KEY=tu_api_key_de_omdb
```
`HF_TOKEN` se usa para generar respuestas de chatbot con Hugging Face. Si falla o no existe, la aplicacion usa una respuesta de respaldo basada en plantilla.
`OMDB_API_KEY` es opcional y permite recuperar posters de peliculas desde OMDb.
## Instalacion
### 1. Clonar el repositorio
```bash
git clone <url-del-repositorio>
cd ValorSentimental
```
### 2. Instalar dependencias del backend
```bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
En Windows PowerShell:
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
```
### 3. Instalar dependencias del frontend
```bash
cd chatbot
npm install
```
## Preparacion de datos
El recomendador usa los CSV de MovieLens en `data/ml-latest`. Si no estan presentes, se pueden descargar con:
```bash
python data/download_movielens_large.py
```
Tambien se puede generar el dataset procesado de 100 peliculas con emociones inferidas por genero:
```bash
python data/script.py
```
El backend intenta cargar primero `data/ml-latest/movies.csv`, `ratings.csv` y `links.csv`. Si no encuentra el dataset completo, usa como alternativa `data/procesado/peliculas_100_emociones.csv`.
## Ejecucion
### Backend
Desde la raiz del proyecto:
```bash
cd backend
python main.py
```
La API queda disponible en:
```text
http://localhost:5000
```
En el primer arranque puede tardar porque se carga o descarga el modelo de emociones.
### Frontend
En otra terminal:
```bash
cd chatbot
npm run dev
```
Vite mostrara la URL local, normalmente:
```text
http://localhost:5173
```
El frontend esta configurado para llamar al backend en `http://localhost:5000`.
## Flujo de uso
1. El usuario se registra o inicia sesion.
2. Durante el registro puede anadir peliculas ya vistas para construir un historial inicial.
3. En el chat escribe como se siente.
4. El backend analiza el texto y calcula emocion dominante, valencia y arousal.
5. El recomendador propone peliculas segun el historial y la estrategia seleccionada.
6. El usuario puede marcar una pelicula como vista y valorarla.
7. Despues puede indicar como se siente, cerrando un ciclo pre/post recomendacion.
## Estrategias de recomendacion
Las estrategias estan en `backend/services/estrategias_recomendacion.py`.
- `v1`: logica binaria. Si la emocion es positiva, recomienda fuera de la zona de confort; si es negativa, recomienda dentro.
- `v2`: pondera de forma continua el grado de confort y la calidad de la pelicula.
- `v3`: calcula un objetivo de confort adaptativo usando valencia y arousal.
Si el usuario no tiene historial, el sistema recomienda peliculas de calidad global usando una puntuacion bayesiana suavizada.
## API principal
### Autenticacion
- `POST /auth/register`
- `POST /auth/login`
- `POST /auth/logout`
- `POST /auth/password`
- `POST /auth/verify`
- `DELETE /auth/account`
### Analisis y recomendacion
- `POST /analizar`
- `POST /recomendacion/seguimiento`
### Historial
- `POST /historial/visto`
- `GET /historial`
- `DELETE /historial`
- `GET /historial/transiciones`
### Catalogo
- `GET /peliculas/populares`
- `GET /peliculas/buscar?q=<texto>`
- `POST /onboarding/historial`
- `GET /poster/<imdb_id>`
## Base de datos
La base de datos se crea automaticamente en:
```text
backend/history.db
```
Tablas principales:
- `Usuarios`
- `Peliculas`
- `Emociones`
- `Historial_Peliculas`
- `Ciclo_Recomendacion`
La arquitectura usa DAOs para separar el acceso a datos de la logica de negocio y un Singleton para centralizar la conexion SQLite.
## Documentacion adicional
El repositorio incluye documentacion de apoyo:
- `DIAGRAMAS_PATRONES.md`: patrones de diseno y arquitectura por capas.
- `docs/diagrama_er.md`: diagrama entidad-relacion.
- `docs/login_seq.md`: secuencia de login.
## Notas
- El modelo de emociones se ejecuta localmente mediante Transformers.
- La generacion textual del chatbot intenta usar Hugging Face y, si no esta disponible, cae a una plantilla local.
- OMDb solo es necesario para mostrar posters; el recomendador funciona sin esa clave.
- `history.db` es una base local generada en ejecucion y no deberia versionarse.