Spaces:
Sleeping
Sleeping
| import pickle | |
| import streamlit as st | |
| import requests | |
| import pandas as pd | |
| # set page setting | |
| st.set_page_config(page_title='TopMovies') | |
| # set history var | |
| if 'history' not in st.session_state: | |
| st.session_state.history = [] | |
| # import preprocessed data | |
| data = pd.read_csv("./data/tags.csv") | |
| # import similarity (to be cached) | |
| def importSim(filename): | |
| sim = pickle.load(open(filename, 'rb')) | |
| return sim | |
| similarity = importSim('similarity.pkl') | |
| # recommender function | |
| def recommend_image(movie, sim): | |
| poster = [] | |
| plot = [] | |
| # index from dataframe | |
| index = data[data['title'] == movie].index[0] | |
| dist = dict(enumerate(sim[index])) | |
| dist = dict(sorted(dist.items(), reverse=True, key = lambda item: item[1])) | |
| #index from 1 because the first is the movie itself | |
| cnt = 0 | |
| for key in dist: | |
| cnt = cnt+1 | |
| if cnt < 15: | |
| title = data.iloc[key].title | |
| try: | |
| posterRes, plotRes = get_poster_plot(title) | |
| poster.append(posterRes) | |
| plot.append(plotRes) | |
| except: | |
| pass | |
| else: | |
| break | |
| return poster[1:], plot[1:] | |
| # get poster | |
| def get_poster_plot(title): | |
| r = requests.get("http://www.omdbapi.com/?i=tt3896198&apikey=37765f04&t=" + title).json() | |
| posterElement = r["Poster"] | |
| plotElement = r["Plot"] | |
| return posterElement, plotElement | |
| # update last viewed list | |
| def update_las_viewed(): | |
| if len(st.session_state.history) > 3: | |
| st.session_state.history.pop() | |
| # sidebar | |
| st.sidebar.write(""" | |
| This is a content based recommender system. Pick a movie from the list or search for it and then wait for the reccomendations. | |
| You will get six movies, posters and plots. | |
| """) | |
| # title | |
| st.write("# Movie Recommendation System") | |
| st.write("Pick a movie from the list and enjoy some new stuffs!") | |
| # select box | |
| title = st.selectbox("", data["title"]) | |
| if title not in st.session_state.history: | |
| st.session_state.history.insert(0, title) | |
| update_las_viewed() | |
| # recommend | |
| with st.spinner("Getting the best movies..."): | |
| recs, plots = recommend_image(title, similarity) | |
| # recommendation cols | |
| st.write("## What to watch next....") | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| st.image(recs[0]) | |
| st.write(plots[0]) | |
| with col2: | |
| st.image(recs[1]) | |
| st.write(plots[1]) | |
| with col3: | |
| st.image(recs[2]) | |
| st.write(plots[2]) | |
| col4, col5, col6 = st.columns(3) | |
| with col4: | |
| st.image(recs[3]) | |
| st.write(plots[3]) | |
| with col5: | |
| st.image(recs[4]) | |
| st.write(plots[4]) | |
| with col6: | |
| st.image(recs[5]) | |
| st.write(plots[5]) | |
| col7, col8, col9 = st.columns(3) | |
| with col7: | |
| st.image(recs[6]) | |
| st.write(plots[6]) | |
| with col8: | |
| st.image(recs[7]) | |
| st.write(plots[7]) | |
| with col9: | |
| st.image(recs[8]) | |
| st.write(plots[8]) | |
| # last viewed | |
| st.write("## Last viewed:") | |
| r1, r2, r3 = st.columns(3) | |
| with r1: | |
| try: | |
| st.image(get_poster_plot(st.session_state.history[0])[0]) | |
| except IndexError: | |
| pass | |
| with r2: | |
| try: | |
| st.image(get_poster_plot(st.session_state.history[1])[0]) | |
| except IndexError: | |
| pass | |
| with r3: | |
| try: | |
| st.image(get_poster_plot(st.session_state.history[2])[0]) | |
| except IndexError: | |
| pass | |