import pickle import streamlit as st import numpy as np # Load artifacts model = pickle.load(open('artifacts/model.pkl', 'rb')) book_names = pickle.load(open('artifacts/book_names.pkl', 'rb')) final_rating = pickle.load(open('artifacts/final_rating.pkl', 'rb')) book_pivot = pickle.load(open('artifacts/book_pivot.pkl', 'rb')) # Function to fetch poster URLs def fetch_poster(suggestion): book_name = [] ids_index = [] poster_url = [] for book_id in suggestion: book_name.append(book_pivot.index[book_id]) for name in book_name[0]: ids = np.where(final_rating['title'] == name)[0][0] ids_index.append(ids) for idx in ids_index: url = final_rating.iloc[idx]['image_url'] poster_url.append(url) return poster_url # Function to recommend books def recommend_book(book_name): books_list = [] book_id = np.where(book_pivot.index == book_name)[0][0] distance, suggestion = model.kneighbors(book_pivot.iloc[book_id, :].values.reshape(1, -1), n_neighbors=4) poster_url = fetch_poster(suggestion) for i in range(len(suggestion[0])): book = book_pivot.index[suggestion[0][i]] books_list.append(book) return books_list[1:], poster_url[1:] # Skip the input book itself # Apply custom CSS for glassmorphism def local_css(file_name): with open(file_name) as f: st.markdown(f'', unsafe_allow_html=True) # Page configuration st.set_page_config(page_title='Book Recommendation System', layout='centered') # Load CSS for styling local_css("style.css") # Add a fancy header with emojis st.markdown("""
Let AI find your perfect book match.
🔎 Type or select a book from the dropdown
{recommended_books[0]}
{recommended_books[1]}
{recommended_books[2]}