--- 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 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=` - `POST /onboarding/historial` - `GET /poster/` ## 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.