Spaces:
Running
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 | |
| ```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. | |