File size: 1,976 Bytes
c9b4d0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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.")