Spaces:
No application file
No application file
| import streamlit as st | |
| import requests | |
| import pandas as pd | |
| import numpy as np | |
| from sklearn.feature_extraction.text import TfidfVectorizer | |
| from sklearn.metrics.pairwise import cosine_similarity | |
| # TMDB API Key (Replace with your own key) | |
| API_KEY = "424c11e3d494d1d1a05f4985c11eaec8" | |
| BASE_URL = "https://api.themoviedb.org/3" | |
| # Function to fetch movies from TMDB API | |
| def fetch_movies(): | |
| url = f"{BASE_URL}/movie/popular?api_key={API_KEY}&language=en-US&page=1" | |
| response = requests.get(url) | |
| if response.status_code == 200: | |
| return response.json().get("results", []) | |
| return [] | |
| # Load movies | |
| data = fetch_movies() | |
| movies_df = pd.DataFrame(data)[["id", "title", "overview", "vote_average"]] | |
| # NLP Processing | |
| vectorizer = TfidfVectorizer(stop_words='english') | |
| tfidf_matrix = vectorizer.fit_transform(movies_df["overview"].fillna("")) | |
| cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix) | |
| # Recommendation function | |
| def recommend_movies(movie_title, top_n=5): | |
| idx = movies_df[movies_df['title'] == movie_title].index | |
| if len(idx) == 0: | |
| return [] | |
| idx = idx[0] | |
| sim_scores = list(enumerate(cosine_sim[idx])) | |
| sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) | |
| sim_scores = sim_scores[1:top_n+1] | |
| movie_indices = [i[0] for i in sim_scores] | |
| return movies_df.iloc[movie_indices][["title", "vote_average"]] | |
| # Streamlit Web App | |
| st.title("π¬ AI-Powered Movie Recommender") | |
| st.write("Select a movie to get recommendations!") | |
| selected_movie = st.selectbox("Choose a movie:", movies_df["title"].values) | |
| if st.button("Get Recommendations"): | |
| recommendations = recommend_movies(selected_movie) | |
| if not recommendations.empty: | |
| st.write("## Recommended Movies:") | |
| for index, row in recommendations.iterrows(): | |
| st.write(f"**{row['title']}** - Rating: {row['vote_average']}") | |
| else: | |
| st.write("No recommendations found.") |