Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -50,6 +50,8 @@ from sklearn.metrics.pairwise import cosine_similarity
|
|
50 |
|
51 |
movies = pd.read_csv("rotten_tomatoes_movies.csv")
|
52 |
reviews = pd.read_csv("rotten_tomatoes_movie_reviews.csv")
|
|
|
|
|
53 |
|
54 |
|
55 |
movies = preprocess_movies(movies)
|
@@ -93,7 +95,7 @@ def movie_recommendation(name, genre_input, hate_genre, movie_input, input_word,
|
|
93 |
confirmation_messages.append(f"- {temp_title} - [μν μ 보 보기]({link})")
|
94 |
|
95 |
initial_message = "μ°ΎμΌμλ μνκ° λ€μ μ€ μμ΅λκΉ? μλ€λ©΄ μ
λ ₯μ μμ ν΄μ£ΌμΈμ. μλ€λ©΄ ν΄λΉ μνλ λ°μ΄ν°λ² μ΄μ€μ μμ΅λλ€."
|
96 |
-
return initial_message + "\n\n" + "\n\n".join(confirmation_messages)
|
97 |
|
98 |
# μν μ λͺ© νμΈ
|
99 |
if movie_input in movies['title'].tolist():
|
@@ -111,25 +113,25 @@ def movie_recommendation(name, genre_input, hate_genre, movie_input, input_word,
|
|
111 |
link = f"https://www.rottentomatoes.com/m/{movie_id}"
|
112 |
confirmation_messages.append(f"- {title} - [μν μ 보 보기]({link})")
|
113 |
|
114 |
-
return initial_message + "\n\n" + "\n\n".join(confirmation_messages)
|
115 |
|
116 |
-
return f"μν '{movie_input}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€."
|
117 |
|
118 |
|
119 |
# μν ID μ‘΄μ¬ μ¬λΆ νμΈ
|
120 |
if movie_id not in movies['id'].values:
|
121 |
-
return f"μν ID '{movie_id}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€."
|
122 |
|
123 |
# μ₯λ₯΄ μ
λ ₯ νμΈ
|
124 |
if genre_input not in movies.columns:
|
125 |
-
return f"μ₯λ₯΄ '{genre_input}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€."
|
126 |
|
127 |
movies_cut = movies_cut[(movies_cut[genre_input] == 1) | (movies_cut['id'] == movie_id)]
|
128 |
|
129 |
# hate_genre = hate_genre.split(', ') if hate_genre else []
|
130 |
for genre in hate_genre:
|
131 |
if genre not in movies.columns:
|
132 |
-
return f"μ₯λ₯΄ '{genre}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€."
|
133 |
movies_cut = movies_cut[(movies_cut[genre] == 0) | (movies_cut['id'] == movie_id)]
|
134 |
reviews_for_rs = reviews_for_rs[reviews_for_rs['id'].isin(movies_cut['id'])]
|
135 |
|
@@ -157,7 +159,7 @@ def movie_recommendation(name, genre_input, hate_genre, movie_input, input_word,
|
|
157 |
grouped_reviews = grouped_reviews[grouped_reviews['reviewText'].str.strip() != '']
|
158 |
|
159 |
if grouped_reviews.empty:
|
160 |
-
return "μ ν¨ν λ¦¬λ·°κ° μμ΅λλ€."
|
161 |
|
162 |
vectorizer = TfidfVectorizer()
|
163 |
tfidf_matrix = vectorizer.fit_transform(grouped_reviews['reviewText'])
|
@@ -190,7 +192,7 @@ def movie_recommendation(name, genre_input, hate_genre, movie_input, input_word,
|
|
190 |
recommended_ids.append(movie_id)
|
191 |
|
192 |
if not recommended_movies:
|
193 |
-
return "μΆμ²ν μνκ° μμ΅λλ€."
|
194 |
|
195 |
# λ‘νΌ ν λ§ν κ²μ λ§ν¬ μΆκ°
|
196 |
search_links = [f"https://www.rottentomatoes.com/m/{movie_id}" for movie_id in recommended_ids]
|
@@ -198,10 +200,10 @@ def movie_recommendation(name, genre_input, hate_genre, movie_input, input_word,
|
|
198 |
# ν¬λ§·ν
λ μΆλ ₯
|
199 |
output = "\n\n".join([f"**{title}** - [μν μ 보 보기]({link})" for title, link in zip(recommended_movies, search_links)])
|
200 |
output = name + 'λμκ² μΆμ²νλ μνλ...\n\n' + output
|
201 |
-
return output
|
202 |
|
203 |
except Exception as e:
|
204 |
-
return f"μ λ³΄κ° μ‘΄μ¬νμ§ μλ μνμ
λλ€. λ€λ₯Έ μνλ₯Ό μλνμΈμ."
|
205 |
|
206 |
|
207 |
# Gradio μΈν°νμ΄μ€ μ€μ
|
@@ -220,7 +222,10 @@ iface = gr.Interface(
|
|
220 |
gr.Radio(label="리뷰 μκ° μ μ μνλ₯Ό μΆμ²λ°μλ μ’μ΅λκΉ?",
|
221 |
choices=["μ", "μλμ€"], value="μλμ€"),
|
222 |
],
|
223 |
-
outputs=
|
|
|
|
|
|
|
224 |
title="μν μΆμ² μμ€ν
",
|
225 |
description="μ₯λ₯΄μ μν μ 보λ₯Ό κΈ°λ°μΌλ‘ μΆμ² μνλ₯Ό μ°Ύμλ립λλ€.",
|
226 |
)
|
|
|
50 |
|
51 |
movies = pd.read_csv("rotten_tomatoes_movies.csv")
|
52 |
reviews = pd.read_csv("rotten_tomatoes_movie_reviews.csv")
|
53 |
+
error_sound = "error.mp3"
|
54 |
+
success_sound = "success.mp3"
|
55 |
|
56 |
|
57 |
movies = preprocess_movies(movies)
|
|
|
95 |
confirmation_messages.append(f"- {temp_title} - [μν μ 보 보기]({link})")
|
96 |
|
97 |
initial_message = "μ°ΎμΌμλ μνκ° λ€μ μ€ μμ΅λκΉ? μλ€λ©΄ μ
λ ₯μ μμ ν΄μ£ΌμΈμ. μλ€λ©΄ ν΄λΉ μνλ λ°μ΄ν°λ² μ΄μ€μ μμ΅λλ€."
|
98 |
+
return initial_message + "\n\n" + "\n\n".join(confirmation_messages), error_sound
|
99 |
|
100 |
# μν μ λͺ© νμΈ
|
101 |
if movie_input in movies['title'].tolist():
|
|
|
113 |
link = f"https://www.rottentomatoes.com/m/{movie_id}"
|
114 |
confirmation_messages.append(f"- {title} - [μν μ 보 보기]({link})")
|
115 |
|
116 |
+
return initial_message + "\n\n" + "\n\n".join(confirmation_messages), error_sound
|
117 |
|
118 |
+
return f"μν '{movie_input}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€.", error_sound
|
119 |
|
120 |
|
121 |
# μν ID μ‘΄μ¬ μ¬λΆ νμΈ
|
122 |
if movie_id not in movies['id'].values:
|
123 |
+
return f"μν ID '{movie_id}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€.", error_sound
|
124 |
|
125 |
# μ₯λ₯΄ μ
λ ₯ νμΈ
|
126 |
if genre_input not in movies.columns:
|
127 |
+
return f"μ₯λ₯΄ '{genre_input}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€.", error_sound
|
128 |
|
129 |
movies_cut = movies_cut[(movies_cut[genre_input] == 1) | (movies_cut['id'] == movie_id)]
|
130 |
|
131 |
# hate_genre = hate_genre.split(', ') if hate_genre else []
|
132 |
for genre in hate_genre:
|
133 |
if genre not in movies.columns:
|
134 |
+
return f"μ₯λ₯΄ '{genre}'μ΄(κ°) λ°μ΄ν°μ μ‘΄μ¬νμ§ μμ΅λλ€.", error_sound
|
135 |
movies_cut = movies_cut[(movies_cut[genre] == 0) | (movies_cut['id'] == movie_id)]
|
136 |
reviews_for_rs = reviews_for_rs[reviews_for_rs['id'].isin(movies_cut['id'])]
|
137 |
|
|
|
159 |
grouped_reviews = grouped_reviews[grouped_reviews['reviewText'].str.strip() != '']
|
160 |
|
161 |
if grouped_reviews.empty:
|
162 |
+
return "μ ν¨ν λ¦¬λ·°κ° μμ΅λλ€.", error_sound
|
163 |
|
164 |
vectorizer = TfidfVectorizer()
|
165 |
tfidf_matrix = vectorizer.fit_transform(grouped_reviews['reviewText'])
|
|
|
192 |
recommended_ids.append(movie_id)
|
193 |
|
194 |
if not recommended_movies:
|
195 |
+
return "μΆμ²ν μνκ° μμ΅λλ€.", error_sound
|
196 |
|
197 |
# λ‘νΌ ν λ§ν κ²μ λ§ν¬ μΆκ°
|
198 |
search_links = [f"https://www.rottentomatoes.com/m/{movie_id}" for movie_id in recommended_ids]
|
|
|
200 |
# ν¬λ§·ν
λ μΆλ ₯
|
201 |
output = "\n\n".join([f"**{title}** - [μν μ 보 보기]({link})" for title, link in zip(recommended_movies, search_links)])
|
202 |
output = name + 'λμκ² μΆμ²νλ μνλ...\n\n' + output
|
203 |
+
return output, success_sound
|
204 |
|
205 |
except Exception as e:
|
206 |
+
return f"μ λ³΄κ° μ‘΄μ¬νμ§ μλ μνμ
λλ€. λ€λ₯Έ μνλ₯Ό μλνμΈμ.", error_sound
|
207 |
|
208 |
|
209 |
# Gradio μΈν°νμ΄μ€ μ€μ
|
|
|
222 |
gr.Radio(label="리뷰 μκ° μ μ μνλ₯Ό μΆμ²λ°μλ μ’μ΅λκΉ?",
|
223 |
choices=["μ", "μλμ€"], value="μλμ€"),
|
224 |
],
|
225 |
+
outputs=[
|
226 |
+
gr.Markdown(label="μΆμ² μν λͺ©λ‘"), # MarkdownμΌλ‘ μΆλ ₯
|
227 |
+
gr.Audio(autoplay = True, visible = False) # μ리 μΆλ ₯
|
228 |
+
],
|
229 |
title="μν μΆμ² μμ€ν
",
|
230 |
description="μ₯λ₯΄μ μν μ 보λ₯Ό κΈ°λ°μΌλ‘ μΆμ² μνλ₯Ό μ°Ύμλ립λλ€.",
|
231 |
)
|