Spaces:
Sleeping
Sleeping
File size: 4,494 Bytes
24a3bb4 68d35c8 24a3bb4 038e989 24a3bb4 038e989 24a3bb4 038e989 24a3bb4 |
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
import pandas as pd
import pickle
from pathlib import Path
import joblib
import os
import requests
from dotenv import load_dotenv
load_dotenv()
os.environ['CALENDARIFIC_API_KEY'] = os.getenv("CALENDARIFIC_API_KEY")
currentPath = Path(__file__).resolve().parent
modelfilePath = currentPath / "similarity.pkl"
moviesfilePath = currentPath / "movielist_images.pkl"
with open(modelfilePath, 'rb') as file:
model = pickle.load(file)
with open(moviesfilePath,'rb') as file:
movieslist = joblib.load(file)
def recommendMoviesByTitle(programmeTitle):
recommended_movies = []
if programmeTitle in movieslist['programmetitle'].values:
movie_index = movieslist[movieslist['programmetitle'] == programmeTitle].index[0]
sim_score = model[movie_index]
#Take the top 10 results ONLY
movie_list = sorted(list(enumerate(sim_score)), reverse = True, key = lambda x: x[1])[1:11]
for i in movie_list:
recommended_movies.append({'programmetitle':movieslist.iloc[i[0]].programmetitle, 'imageurl': movieslist.iloc[i[0]].imagepath})
else:
return("No movies to recommend by title...")
return recommended_movies
COUNTRY_CODE = "US"
def get_holidaysByScheduleDate(scheduleDate):
key = os.environ["CALENDARIFIC_API_KEY"]
current_date = pd.to_datetime(scheduleDate,errors="coerce")
year = current_date.year
month = current_date.month
holidaylist = []
endpoint_url = f"https://calendarific.com/api/v2/holidays?api_key={key}&country={COUNTRY_CODE}&year={year}&month={month}"
response = requests.get(endpoint_url)
if response.status_code == 200:
holidays = response.json()['response']['holidays']
holidaylist = list(map(lambda x: x['description'],holidays))
return list(set(holidaylist))
else:
return []
def recommendMoviesByKeywordsAndGenres(keywordToSearchBy, genres, referenceProgrammeTitle):
recommended_movies = []
filtered_movies = []
# Convert the list of genres to lowercase for consistent comparison
genres = [genre.lower().strip() for genre in genres]
if keywordToSearchBy:
#search for event name in the programme title first
filtered_movies = movieslist[movieslist['programmetitle'].str.contains(keywordToSearchBy, case=False)]
filtered_movies = filtered_movies[filtered_movies['genredescription'].apply(
lambda genre_list: all(genre.lower() in [g.lower().strip() for g in genre_list.split(',')] for genre in genres))]
if len(filtered_movies) == 0:
# Step 1: Filter the DataFrame to find movies that match the given keyword
filtered_movies = movieslist[movieslist['Name'].str.contains(keywordToSearchBy, case=False)]
filtered_movies = filtered_movies[filtered_movies['genredescription'].apply(
lambda genre_list: all(genre.lower() in [g.lower().strip() for g in genre_list.split(',')] for genre in genres))]
if len(filtered_movies) == 0:
return recommendMoviesByTitle(referenceProgrammeTitle)
if filtered_movies.empty:
return("No movies found with the given keyword and genres.")
movies = filtered_movies.sample(len(filtered_movies))
recommended_movies.append({'programmetitle':movies.iloc[0]['programmetitle'],'imageurl': movies.iloc[0]['imagepath']})
movie_index = movies.index[0]
sim_score = model[movie_index]
movie_list = sorted(list(enumerate(sim_score)), reverse=True, key=lambda x: x[1])[1:10]
for i in movie_list:
recommended_movies.append({'programmetitle':movieslist.iloc[i[0]].programmetitle,'imageurl': movieslist.iloc[i[0]].imagepath})
return recommended_movies
def recommendProgrammes(scheduleDate : str, genres: list, referenceProgrammeTitle : str):
holidaylist = get_holidaysByScheduleDate(scheduleDate)
eventName = ""
if any("Christmas" in sentence for sentence in holidaylist):
eventName = "Christmas"
elif any("New year" in sentence for sentence in holidaylist):
eventName = "New year"
elif any("Halloween" in sentence for sentence in holidaylist):
eventName = "Halloween"
elif any("Valentine" in sentence for sentence in holidaylist):
eventName = "Valentine"
elif any("Black Friday" in sentence for sentence in holidaylist):
eventName = "Thanksgiving"
return recommendMoviesByKeywordsAndGenres(eventName,genres=genres, referenceProgrammeTitle = referenceProgrammeTitle)
|