- Ashly Nicole Veliz Barba (202210422)
- Darlene Priyanka Escobar Hinojosa (202310296)
Este proyecto implementa una plataforma de streaming con funcionalidades de búsqueda y recomendaciones de películas. Se enfoca en la eficiencia y escalabilidad mediante estructuras de datos avanzadas y patrones de diseño.
- Búsquedas rápidas y eficientes por palabras clave, frases o prefijos en títulos, sinopsis y etiquetas.
- Sistema de recomendaciones basado en "Me gusta" y similitud de tags o sinopsis.
- Gestor de listas para marcar películas en "Ver más tarde" y "Me gusta".
- Optimización con AVL Tree para ordenar y equilibrar la búsqueda de películas.
- Maneja la carga de datos desde archivos CSV y JSON.
- Implementa Singleton para garantizar una única instancia.
- Convierte CSV a JSON si el archivo JSON no existe.
- Implementa un AVL Tree para la búsqueda eficiente de películas por título y sinopsis.
- Organiza las películas de forma balanceada para optimizar las búsquedas.
- Integra RelevanceCalculator para calcular la relevancia de cada coincidencia.
- Implementa un árbol binario de búsqueda para organizar películas por etiquetas.
- Permite buscar películas por géneros o temas (#drama, #horror, etc.).
- Determina la relevancia de una película según la consulta de búsqueda.
- Asigna puntajes a coincidencias en título, sinopsis y tags.
- Ajusta la relevancia considerando el número de "likes".
- Implementa un Observer que actualiza recomendaciones cuando se añaden películas a "Me gusta".
- Filtra y ordena películas similares según su relevancia.
- Aplica el patrón Factory para crear instancias de estrategias de similitud (por tags o sinopsis).
- SimilitudSinopsis: Encuentra películas similares analizando coincidencias de palabras clave en la sinopsis.
- SimilitudTag: Busca películas con etiquetas comunes.
- Manejan listas de "Ver más tarde" y "Me gusta" con una Lista en Pila.
- Integran el patrón Observer para notificar cambios y actualizar recomendaciones.
- DataProcessor: Garantiza una única instancia para la gestión de la carga y almacenamiento de datos en JSON y CSV.
- SimilitudFactory: Crea instancias de diferentes estrategias de similitud para recomendaciones de películas.
- Recomendador: Recibe notificaciones cuando se agregan películas a "Me gusta" y actualiza las recomendaciones.
- VerMásTarde y MeGusta: Notifican a los observadores sobre cambios en sus listas.
- AlgoritmoSimilitud: Permite cambiar dinámicamente entre diferentes métodos de similitud (por sinopsis o por tags) para generar recomendaciones personalizadas.
El sistema usa la siguiente ponderación para calcular la relevancia de una película:
- Título: 5 puntos si coincide exactamente, 3 si es coincidencia parcial.
- Sinopsis: 3 puntos por cada aparición de la palabra clave.
- Tags: 4 puntos si la palabra coincide con un tag.
- Likes: Se ponderan con
(Likes / log(1 + total Likes)). - Se ordenan los resultados y se muestran los 5 más relevantes.
El proyecto utiliza programación paralela para optimizar la carga y procesamiento de datos. Los siguientes resultados demuestran la eficiencia del enfoque paralelo:
| Líneas Procesadas | Secuencial (s) | Paralelo (s) | Aceleración |
|---|---|---|---|
| Todo el archivo | 7.14161 | 3.24764 | 2.20x |
- Cargar películas desde CSV o JSON (se almacena en JSON para futuras consultas).
- Buscar películas por título, sinopsis o tags.
- Marcar películas en "Me gusta" para recibir recomendaciones basadas en similitud.
- Agregar películas a "Ver más tarde" para guardarlas en una lista.
- Obtener recomendaciones automáticamente según tus preferencias.
- Abrir la terminal en el directorio del proyecto.
- Crear y entrar al directorio de compilación:
mkdir build cd build - Generar los archivos de compilación con cmake:
cmake ..
- Compilar el proyecto:
make
- Ejecutar la aplicación:
./bin/StreamingPlatform
Hemos desarrollado el frontend del proyecto como un esfuerzo adicional, implementándolo en TypeScript con la estructura necesaria para interactuar con el backend. Sin embargo, aún no hemos logrado establecer correctamente la conexión entre ambos. Nos enfocamos en diseñar la interfaz y los servicios de comunicación, pero faltan algunos detalles para que la integración funcione completamente.
El código del frontend está disponible en nuestro repositorio, y aunque no es parte del requerimiento principal, decidimos trabajarlo como un extra para complementar el sistema. Reconocemos que quedan ajustes pendientes para lograr una interacción fluida con el backend, y estamos en proceso de solucionar estos detalles.
Este proyecto implementa una plataforma de streaming con estructuras de datos eficientes y patrones de diseño modernos. La integración de AVL Trees y búsquedas optimizadas permite resultados rápidos y precisos. Además, el sistema de recomendaciones personalizadas mejora la experiencia del usuario al sugerir contenido relevante basado en sus gustos.
