Author: mxcm21 ========== ESSENTIAL INSTRUCTIONS ========== 1) Ensure all dependencies are installed: - Flask (and it's sub-dependencies) - Pandas - An internet connection is required as website dependencies are taken from CDN's, specifically for: - jQuery v3.3.1 - Bootstrap v4.1.3 - Popper.js v1.14.3 - FontAwesome v5.3.1 - An internet connection is also required as my solution makes API calls to TheMovieDB.org for additional information 2) Run on command line (can't be run from IDLE): - python3 personalisedMovies.py [portNumber] - where portNumber is an optional parameter specifying the port to run on - portNumber defaults to 5000, and returns an error if port is already in use Note: some portNumber's will be blocked by firewall rules, so best to use 5000/8000/8080 3) Access website via: http://127.0.0.1:5000/ (or your chosen portNumber) - or by http://localhost:5000/ - Website is fully compatible and tested with Chrome, Firefox and Edge (IE is not supported) Acknowledgments: For use of the MovieLens dataset (the smaller set was used for efficiency reasons, but code could easily be adapted for the full dataset): F. Maxwell Harper and Joseph A. Konstan. https://grouplens.org/datasets/movielens/latest/ For use of TheMovieDB API: https://www.themoviedb.org/ Aswell as the lecture content I followed the following three tutorials to help inform me about recommendation techniques: https://medium.com/@james_aka_yale/the-4-recommendation-engines-that-can-predict-your-movie-tastes-bbec857b8223 , Accessed 31/11/2018 https://beckernick.github.io/matrix-factorization-recommender/ , Accessed 31/11/2018 https://stackabuse.com/creating-a-simple-recommender-system-in-python-using-pandas/ , Accessed 31/11/2018 ========== FEATURES (194 words) ========== ==== Dataset: - MovieLens - csv for interface users - smaller set for memory-efficiency, easily scalable - link to TMDB-API ==== Profiling: - user has: Username, email, language, MovieLensID - update functionality under "Profile" - can create new ID to start off with no previous ratings - saved to csv files for persistency - language change via dropdown - Flask handles login/out cookies ==== Recommendations: 1) TopRecommendations - matrix-factorisation, interface shows predicted-rating 2) WatchAgain - previously rated sorted by rating/timestamp 3) Search - Matrix-Factorisation displays predicted-rating - table sorted by rating/predictedRating - filter by genre, and/or partial/full search-term - tags included, searching "pixar" returns movies tagged as pixar Movie Modal: - extra information (viaTMDB) - list of similar movies, via item-item-collaborative-filtering - matrix-factorisation used to give predicted-rating if no user-rating is available ==== Personalised: - full translation - language specific poster 4 options which demonstrating full utf-8 characterset - appropriate meta tags showing site has i18n features ==== Interface: - AJAX/JSON communication to dynamically load information/translations - clicking rows provides seamless modals - instead of rebuilding Matricx-Factorisation-matricies every time a new rating is added, user can refresh as needed - language-specific information message is displayed - responsive design (jQuery/Bootsrap)