| import streamlit as st |
| import joblib |
| import pandas as pd |
| from sklearn.metrics.pairwise import cosine_similarity |
|
|
| tfidf = joblib.load("src/tfidf_vectorizer.pkl") |
| df = pd.read_csv("src/metadata.csv") |
|
|
| tfidf_matrix = tfidf.transform(df["combined_features"]) |
| cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix) |
|
|
| indices = pd.Series(df.index, index=df["track_name"]).drop_duplicates() |
|
|
| def recommend(song_name, n=5): |
| idx = indices[song_name] |
| idx = idx.iloc[0] if hasattr(idx, "iloc") else idx |
|
|
| sim_scores = list(enumerate(cosine_sim[idx])) |
| sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)[1:n+1] |
|
|
| song_indices = [i[0] for i in sim_scores] |
| return df.loc[song_indices, ["track_name", "track_artist", "playlist_genre"]] |
|
|
| st.title("🎵 Spotify Recommendation System") |
|
|
| song = st.selectbox("Bir şarkı seçin:", df["track_name"].unique()) |
|
|
| if st.button("Öner"): |
| recommendations = recommend(song) |
| st.dataframe(recommendations) |
|
|