Spaces:
Sleeping
Sleeping
File size: 2,437 Bytes
132ade3 fec1e83 132ade3 f8ce2a5 5e45594 132ade3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 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() |