jhl02 commited on
Commit
436a4ea
β€’
1 Parent(s): d14303e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -11
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=gr.Markdown(label="μΆ”μ²œ μ˜ν™” λͺ©λ‘"), # Markdown으둜 좜λ ₯
 
 
 
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
  )