Spaces:
Sleeping
Sleeping
Download app.py from coldn00dl3s/FlickBox: direct link, hf CLI and curl.
- Browser
- Download file 2.44 kB
-
https://huggingface.co/spaces/coldn00dl3s/FlickBox/resolve/main/app.py
- Command line
-
hf download hf://spaces/coldn00dl3s/FlickBox/app.py
-
curl -L -o app.py https://huggingface.co/spaces/coldn00dl3s/FlickBox/resolve/main/app.py
2.44 kB
| import numpy as np | |
| import pandas as pd | |
| import ast | |
| from sentence_transformers import SentenceTransformer, util | |
| movies = pd.read_csv('input/tmdb_5000_movies.csv') | |
| movies[['genres','keywords','production_companies','production_countries','spoken_languages']] = movies[['genres','keywords','production_companies','production_countries','spoken_languages']].applymap(lambda x : ast.literal_eval(str(x))) | |
| def get_data(x, cols, dict): | |
| for col in cols: | |
| for i in range(len(x[col])): | |
| for j in range(len(x[col][i])): | |
| x[col][i][j] = x[col][i][j][dict] | |
| return x | |
| movies = get_data(movies, ['genres','keywords','production_companies','production_countries','spoken_languages'],'name') | |
| movies[['budget','id','popularity','revenue','runtime','vote_average','vote_count']] = movies[['budget','id','popularity','revenue','runtime','vote_average','vote_count']].apply(pd.to_numeric, errors = 'coerce') | |
| credits = pd.read_csv("input/tmdb_5000_credits.csv") | |
| credits[['cast', 'crew']] = credits[['cast', 'crew']].applymap(lambda x : ast.literal_eval(str(x))) | |
| credits = get_data(credits, ['cast', 'crew'],'name') | |
| movies = pd.merge(movies, credits[['movie_id','cast', 'crew']], left_on= "id", right_on = "movie_id", how = "left") | |
| movies['overview'] = movies['overview'].astype(str) | |
| model = SentenceTransformer('all-MiniLM-L6-v2') | |
| overview_embeddings = model.encode(movies['overview']) | |
| overview_cos_sim = util.cos_sim(overview_embeddings, overview_embeddings) | |
| def recommender(movie_name,num_movies): | |
| try: | |
| result = pd.concat([movies["original_title"], | |
| pd.DataFrame(overview_cos_sim[:,movies[movies["original_title"] == movie_name].index].numpy(), columns=['Overview'])],axis = 1) | |
| result = result[result["Overview"] != 1] | |
| result = result.sort_values('Overview', ascending= False).head(num_movies + 1).reset_index(drop = True) | |
| result = result['original_title'] | |
| res = result.tolist() | |
| return "\n".join(res[1:]) | |
| except: | |
| return "Movie not available in database. Kindly go for more well-known or English Movies" | |
| import gradio as gr | |
| demo = gr.Interface( | |
| fn=recommender, | |
| inputs=[gr.Textbox(label = "Enter your most recently watched movie "), gr.Slider(0, 15,step=1,label = "Enter the number of movies you want recommended")], | |
| outputs=["text"], | |
| title = "FlickBox : A Movie Recommendation Utility" | |
| ) | |
| demo.launch() |