Spaces:
Sleeping
Sleeping
| import torch | |
| import gradio as gr | |
| import pandas as pd | |
| from sentence_transformers import SentenceTransformer, util | |
| df = pd.read_csv("movies_dataset.csv") | |
| df['full_text'] = ( | |
| df['title'].fillna('') + " | " + | |
| df['genres'].fillna('') + " | " + | |
| df['overview'].fillna('') + " | " + | |
| df['tagline'].fillna('') | |
| ) | |
| df = df.sort_values(by="popularity", ascending=False).head(5000).reset_index(drop=True) | |
| model = SentenceTransformer('all-MiniLM-L6-v2') | |
| df['full_text'] = df['full_text'].fillna('').astype(str) | |
| embeddings = model.encode(df['full_text'].tolist(), show_progress_bar=False) | |
| df['embeddings'] = embeddings.tolist() | |
| embedding_tensor = torch.tensor(embeddings) | |
| def recommend_movies(user_input, top_k=5): | |
| if not user_input.strip(): | |
| return "❗Please enter a movie description or genre." | |
| user_embedding = model.encode(user_input, convert_to_tensor=True) | |
| similarities = util.cos_sim(user_embedding, embedding_tensor)[0] | |
| top_indices = similarities.argsort(descending=True)[:top_k] | |
| results = [] | |
| for idx in top_indices: | |
| row = df.iloc[idx.item()] | |
| results.append(f"🎬 **{row['title']}**\n{row['overview'][:300]}...") | |
| return "\n\n".join(results) | |
| demo = gr.Interface( | |
| fn=recommend_movies, | |
| inputs=gr.Textbox(lines=2, placeholder="Describe a movie, mood, or genre..."), | |
| outputs=gr.Markdown(), | |
| title="🎬 Movie Recommender", | |
| description="Type in a description, vibe, or genre and get movie suggestions!" | |
| ) | |
| demo.launch() | |