Karley8 commited on
Commit
be2c39d
Β·
verified Β·
1 Parent(s): e0c694e

Update GlobalMovies.py

Browse files
Files changed (1) hide show
  1. GlobalMovies.py +63 -63
GlobalMovies.py CHANGED
@@ -1,63 +1,94 @@
1
- # assignment3_analysis.py
2
- # AI Movie Recommender System – Foreign Films Edition
3
- # Author: Karley
4
- # Description: This script collects foreign film data using the TMDB API,
5
- # processes text using NLP (TF-IDF), and recommends similar movies using content-based filtering.
6
 
7
  import requests
8
  from sklearn.feature_extraction.text import TfidfVectorizer
9
  from sklearn.metrics.pairwise import cosine_similarity
10
 
11
- API_KEY = "3859ec79f3bda0615907794345ff1f17" # Replace with your actual TMDB API key
 
 
 
12
 
13
  # -----------------------------
14
- # 1. TMDB API DATA COLLECTION
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  # -----------------------------
16
  def get_foreign_movies(original_language="fr", page=1):
17
  """
18
- Retrieves a list of foreign language movies from TMDB by language.
19
  """
20
  url = f"https://api.themoviedb.org/3/discover/movie?api_key={API_KEY}&with_original_language={original_language}&sort_by=popularity.desc&page={page}"
21
  response = requests.get(url)
22
- return response.json()["results"]
23
 
24
- def build_movie_dataset(language="fr", pages=2):
25
  """
26
- Builds a dataset of movie titles, descriptions, and original languages.
 
27
  """
28
- titles = []
29
- descriptions = []
30
- languages = []
31
- for page in range(1, pages + 1):
32
- movies = get_foreign_movies(language, page)
33
- for movie in movies:
34
- if movie.get("overview"):
35
- titles.append(movie["title"])
36
- descriptions.append(movie["overview"])
37
- languages.append(movie["original_language"])
38
- return titles, descriptions, languages
39
 
40
- # Build your dataset
41
- movie_titles, movie_descriptions, movie_languages = build_movie_dataset("fr")
 
42
 
43
  # -----------------------------
44
- # 2. NLP PROCESSING (TF-IDF)
45
  # -----------------------------
46
  def create_tfidf_matrix(descriptions):
47
- """
48
- Transforms movie descriptions into a TF-IDF matrix for similarity comparison.
49
- """
50
  tfidf = TfidfVectorizer(stop_words="english")
51
  return tfidf.fit_transform(descriptions)
52
 
53
  tfidf_matrix = create_tfidf_matrix(movie_descriptions)
54
 
55
  # -----------------------------
56
- # 3. CONTENT-BASED RECOMMENDER
57
  # -----------------------------
58
- def recommend_foreign(movie_title, tfidf_matrix, movie_titles, movie_languages, lang="fr"):
59
  """
60
- Returns 5 similar foreign-language movies using cosine similarity.
61
  """
62
  if movie_title not in movie_titles:
63
  return ["Movie not found in dataset."]
@@ -70,38 +101,7 @@ def recommend_foreign(movie_title, tfidf_matrix, movie_titles, movie_languages,
70
  for i in indices:
71
  if movie_languages[i] == lang and i != idx:
72
  recommendations.append(movie_titles[i])
73
- if len(recommendations) == 5:
74
- break
75
- return recommendations
76
- # --- NLP: TF-IDF Vectorization ---
77
- from sklearn.feature_extraction.text import TfidfVectorizer
78
-
79
- def create_tfidf_matrix(descriptions):
80
- """
81
- Transforms text descriptions into TF-IDF vectors.
82
- """
83
- tfidf = TfidfVectorizer(stop_words='english')
84
- return tfidf.fit_transform(descriptions)
85
-
86
- tfidf_matrix = create_tfidf_matrix(movie_descriptions)
87
- # --- Content-Based Filtering using Cosine Similarity ---
88
- from sklearn.metrics.pairwise import cosine_similarity
89
-
90
- def recommend_movies(movie_title, tfidf_matrix, titles, languages, lang="fr", top_n=5):
91
- """
92
- Recommends movies similar to the given title, filtered by language.
93
- """
94
- if movie_title not in titles:
95
- return ["Movie not found in dataset."]
96
-
97
- idx = titles.index(movie_title)
98
- cosine_sim = cosine_similarity(tfidf_matrix[idx], tfidf_matrix).flatten()
99
- sim_indices = cosine_sim.argsort()[::-1]
100
-
101
- recommendations = []
102
- for i in sim_indices:
103
- if i != idx and languages[i] == lang:
104
- recommendations.append(titles[i])
105
  if len(recommendations) == top_n:
106
  break
107
  return recommendations
 
 
1
+ # GlobalMovies.py
2
+ # Backend logic for WorldFlix – Global Movie Recommender
 
 
 
3
 
4
  import requests
5
  from sklearn.feature_extraction.text import TfidfVectorizer
6
  from sklearn.metrics.pairwise import cosine_similarity
7
 
8
+ # -----------------------------
9
+ # TMDB API Setup
10
+ # -----------------------------
11
+ API_KEY = "your_tmdb_api_key_here" # πŸ” Replace with your real key
12
 
13
  # -----------------------------
14
+ # Region + Language Mapping
15
+ # -----------------------------
16
+ region_languages = {
17
+ "European Films": {
18
+ "fr": "French",
19
+ "it": "Italian",
20
+ "es": "Spanish",
21
+ "de": "German",
22
+ "pt": "Portuguese"
23
+ },
24
+ "Asian Films": {
25
+ "ja": "Japanese",
26
+ "ko": "Korean",
27
+ "hi": "Hindi",
28
+ "zh": "Chinese"
29
+ },
30
+ "Latin American Films": {
31
+ "es": "Spanish",
32
+ "pt": "Portuguese"
33
+ },
34
+ "Middle Eastern Films": {
35
+ "fa": "Persian",
36
+ "ar": "Arabic",
37
+ "tr": "Turkish"
38
+ },
39
+ "African Films": {
40
+ "sw": "Swahili",
41
+ "ar": "Arabic",
42
+ "fr": "French"
43
+ }
44
+ }
45
+
46
+ # -----------------------------
47
+ # TMDB Data Fetching
48
  # -----------------------------
49
  def get_foreign_movies(original_language="fr", page=1):
50
  """
51
+ Retrieves a list of foreign language movies from TMDB.
52
  """
53
  url = f"https://api.themoviedb.org/3/discover/movie?api_key={API_KEY}&with_original_language={original_language}&sort_by=popularity.desc&page={page}"
54
  response = requests.get(url)
55
+ return response.json().get("results", [])
56
 
57
+ def build_movie_dataset(languages=["fr", "es", "it"], pages=2):
58
  """
59
+ Builds a dataset of movies from a list of language codes.
60
+ Returns: titles, descriptions, language codes
61
  """
62
+ titles, descriptions, langs = [], [], []
63
+ for lang in languages:
64
+ for page in range(1, pages + 1):
65
+ movies = get_foreign_movies(original_language=lang, page=page)
66
+ for movie in movies:
67
+ if movie.get("overview") and movie.get("title"):
68
+ titles.append(movie["title"])
69
+ descriptions.append(movie["overview"])
70
+ langs.append(movie["original_language"])
71
+ return titles, descriptions, langs
 
72
 
73
+ # πŸ” Default: Pull movies for all region languages (adjust pages if needed)
74
+ all_region_langs = {lang for group in region_languages.values() for lang in group}
75
+ movie_titles, movie_descriptions, movie_languages = build_movie_dataset(list(all_region_langs), pages=2)
76
 
77
  # -----------------------------
78
+ # NLP: TF-IDF Matrix
79
  # -----------------------------
80
  def create_tfidf_matrix(descriptions):
 
 
 
81
  tfidf = TfidfVectorizer(stop_words="english")
82
  return tfidf.fit_transform(descriptions)
83
 
84
  tfidf_matrix = create_tfidf_matrix(movie_descriptions)
85
 
86
  # -----------------------------
87
+ # Recommender Function
88
  # -----------------------------
89
+ def recommend_foreign(movie_title, tfidf_matrix, movie_titles, movie_languages, lang="fr", top_n=5):
90
  """
91
+ Returns top_n similar movies in the same language as movie_title.
92
  """
93
  if movie_title not in movie_titles:
94
  return ["Movie not found in dataset."]
 
101
  for i in indices:
102
  if movie_languages[i] == lang and i != idx:
103
  recommendations.append(movie_titles[i])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  if len(recommendations) == top_n:
105
  break
106
  return recommendations
107
+