| import pandas as pd
|
|
|
| def load_movie_data(path="imdb_top_1000/imdb_top_1000.csv"):
|
| df = pd.read_csv(path)
|
| df.rename(columns={"Series_Title": "title", "Released_Year": "year", "Genre": "genre",
|
| "IMDB_Rating": "rating", "Poster_Link": "poster"}, inplace=True)
|
|
|
|
|
| df["mood"] = df["genre"].apply(lambda g: infer_mood_from_genre(g))
|
| return df
|
|
|
| def infer_mood_from_genre(genre_str):
|
| genre_str = genre_str.lower() if isinstance(genre_str, str) else ""
|
| if any(g in genre_str for g in ["romance", "comedy"]):
|
| return "Feel-good"
|
| elif any(g in genre_str for g in ["action", "thriller"]):
|
| return "Intense"
|
| elif "drama" in genre_str:
|
| return "Thought-provoking"
|
| elif "animation" in genre_str:
|
| return "Funny"
|
| else:
|
| return "General"
|
|
|
| def recommend_movies(df, mood=None, genre=None, min_rating=0.0):
|
| filtered = df.copy()
|
|
|
| if mood:
|
| filtered = filtered[filtered["mood"].str.contains(mood, case=False, na=False)]
|
|
|
| if genre and genre.lower() != "any":
|
| filtered = filtered[filtered["genre"].str.contains(genre, case=False, na=False)]
|
|
|
| filtered = filtered[filtered["rating"] >= min_rating]
|
|
|
| filtered = filtered.sort_values(by="rating", ascending=False)
|
|
|
| return filtered.head(10)
|
|
|
|
|