rijdev commited on
Commit
0d6ce78
·
verified ·
1 Parent(s): 533b8cb

Made the genre selection a dropdown

Browse files
Files changed (1) hide show
  1. app.py +11 -6
app.py CHANGED
@@ -3,10 +3,10 @@ import pandas as pd
3
  import os
4
 
5
  # 1) Load movies.csv from extracted ml-32m dataset
6
- csv_path = os.path.join( "movies.csv") # Adjust path if needed
7
  df = pd.read_csv(csv_path)
8
 
9
- # 2) Normalize genres (if needed) and extract release year from title
10
  df["genres"] = df["genres"].apply(lambda g: "|".join(g) if isinstance(g, list) else str(g))
11
  df["release_year"] = (
12
  df["title"]
@@ -17,7 +17,12 @@ df["release_year"] = (
17
  # 3) Deduplicate metadata
18
  metadata = df[["title", "genres", "release_year"]].drop_duplicates()
19
 
20
- # 4) Recommendation function
 
 
 
 
 
21
  def recommend_by_genre_year(genre: str, year: int, top_k: int = 5) -> str:
22
  mask_genre = metadata["genres"].str.lower().str.contains(genre.lower(), na=False)
23
  mask_year = metadata["release_year"].fillna(0) >= year
@@ -32,11 +37,11 @@ def recommend_by_genre_year(genre: str, year: int, top_k: int = 5) -> str:
32
  for _, row in picks.iterrows()
33
  )
34
 
35
- # 5) Gradio interface
36
  iface = gr.Interface(
37
  fn=recommend_by_genre_year,
38
  inputs=[
39
- gr.Textbox(label="Genre", placeholder="e.g. Action, Romance"),
40
  gr.Number(label="Release Year (≥)", value=2010, precision=0),
41
  gr.Slider(1, 10, step=1, label="Number of Recommendations", value=5),
42
  ],
@@ -44,7 +49,7 @@ iface = gr.Interface(
44
  title="🎬 Genre & Year-Based Movie Recommender",
45
  description="""
46
  Loads local MovieLens metadata (ml-32m), extracts release years from titles,
47
- normalizes genres, and filters by genre substring & year. No internet required.
48
  """,
49
  )
50
 
 
3
  import os
4
 
5
  # 1) Load movies.csv from extracted ml-32m dataset
6
+ csv_path = os.path.join("movies.csv") # Adjust path if needed
7
  df = pd.read_csv(csv_path)
8
 
9
+ # 2) Normalize genres and extract release year from title
10
  df["genres"] = df["genres"].apply(lambda g: "|".join(g) if isinstance(g, list) else str(g))
11
  df["release_year"] = (
12
  df["title"]
 
17
  # 3) Deduplicate metadata
18
  metadata = df[["title", "genres", "release_year"]].drop_duplicates()
19
 
20
+ # 4) Extract unique genres
21
+ all_genres = set()
22
+ df["genres"].str.split("|").apply(all_genres.update)
23
+ genre_list = sorted(all_genres)
24
+
25
+ # 5) Recommendation function
26
  def recommend_by_genre_year(genre: str, year: int, top_k: int = 5) -> str:
27
  mask_genre = metadata["genres"].str.lower().str.contains(genre.lower(), na=False)
28
  mask_year = metadata["release_year"].fillna(0) >= year
 
37
  for _, row in picks.iterrows()
38
  )
39
 
40
+ # 6) Gradio interface with dropdown genre selection
41
  iface = gr.Interface(
42
  fn=recommend_by_genre_year,
43
  inputs=[
44
+ gr.Dropdown(choices=genre_list, label="Select Genre"),
45
  gr.Number(label="Release Year (≥)", value=2010, precision=0),
46
  gr.Slider(1, 10, step=1, label="Number of Recommendations", value=5),
47
  ],
 
49
  title="🎬 Genre & Year-Based Movie Recommender",
50
  description="""
51
  Loads local MovieLens metadata (ml-32m), extracts release years from titles,
52
+ normalizes genres, and filters by genre & year. No typing needed — just click!
53
  """,
54
  )
55