Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pickle | |
| import pandas as pd | |
| import numpy as np | |
| popular_dict = pickle.load(open('popular_dict.pkl', 'rb')) | |
| pt = pickle.load(open('pt.pkl', 'rb')) | |
| books_dict = pickle.load(open('books_dict.pkl', 'rb')) | |
| similarity_scores = pickle.load(open('similarity_scores.pkl', 'rb')) | |
| popular_df = pd.DataFrame(popular_dict) | |
| books = pd.DataFrame(books_dict) | |
| st.title('Book Recommendation System') | |
| st.write('This is a simple book recommendation system based on the content of the book and the popularity of the book. ' | |
| 'Select a book from the dropdown below to get recommendations.') | |
| def recommend_books(book_name): | |
| if book_name not in pt.index: | |
| return [] | |
| index = np.where(pt.index == book_name)[0][0] | |
| similar_items = sorted(list(enumerate(similarity_scores[index])), key=lambda x: x[1], reverse=True)[1:5] | |
| data = [] | |
| for i in similar_items: | |
| item = [] | |
| temp_df = books[books['Book-Title'] == pt.index[i[0]]] | |
| popular_df1 = popular_df[popular_df['Book-Title'] == pt.index[i[0]]] | |
| item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Title'].values)) | |
| item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Author'].values)) | |
| item.extend(list(temp_df.drop_duplicates('Book-Title')['Image-URL-L'].values)) | |
| if not popular_df1.empty: | |
| item.extend(list(popular_df1.drop_duplicates('Book-Title')['num_ratings'].values)) | |
| item.extend(list(popular_df1.drop_duplicates('Book-Title')['avg_rating'].values.round(2))) | |
| else: | |
| item.extend([None, None]) # Placeholder for missing ratings and avg_rating | |
| data.append(item) | |
| return data | |
| book_name = st.selectbox('Select a book', pt.index) | |
| recommendations = recommend_books(book_name) | |
| if recommendations: | |
| st.write(f"Recommendations based on '{book_name}':") | |
| for i in recommendations: | |
| st.image(i[2], caption=i[0]) | |
| st.write('Author:', i[1]) | |
| st.write('Number of Ratings:', i[3] if i[3] is not None else 'Not Available') | |
| st.write('Average Rating:', i[4] if i[4] is not None else 'Not Available') | |
| st.write('---------------------------------') | |
| else: | |
| st.write(f"No recommendations found for '{book_name}'.") | |