Spaces:
Running
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
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:
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
git clone <url-del-repositorio>
cd ValorSentimental
2. Instalar dependencias del backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
En Windows PowerShell:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
3. Instalar dependencias del frontend
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:
python data/download_movielens_large.py
Tambien se puede generar el dataset procesado de 100 peliculas con emociones inferidas por genero:
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:
cd backend
python main.py
La API queda disponible en:
http://localhost:5000
En el primer arranque puede tardar porque se carga o descarga el modelo de emociones.
Frontend
En otra terminal:
cd chatbot
npm run dev
Vite mostrara la URL local, normalmente:
http://localhost:5173
El frontend esta configurado para llamar al backend en http://localhost:5000.
Flujo de uso
- El usuario se registra o inicia sesion.
- Durante el registro puede anadir peliculas ya vistas para construir un historial inicial.
- En el chat escribe como se siente.
- El backend analiza el texto y calcula emocion dominante, valencia y arousal.
- El recomendador propone peliculas segun el historial y la estrategia seleccionada.
- El usuario puede marcar una pelicula como vista y valorarla.
- 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/registerPOST /auth/loginPOST /auth/logoutPOST /auth/passwordPOST /auth/verifyDELETE /auth/account
Analisis y recomendacion
POST /analizarPOST /recomendacion/seguimiento
Historial
POST /historial/vistoGET /historialDELETE /historialGET /historial/transiciones
Catalogo
GET /peliculas/popularesGET /peliculas/buscar?q=<texto>POST /onboarding/historialGET /poster/<imdb_id>
Base de datos
La base de datos se crea automaticamente en:
backend/history.db
Tablas principales:
UsuariosPeliculasEmocionesHistorial_PeliculasCiclo_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.dbes una base local generada en ejecucion y no deberia versionarse.