similar-books / app.py
Jimmie's picture
Update app.py
0e89955 unverified
# imports
import streamlit as st
from fastai.tabular.all import *
from PIL import Image
# Preprocessing of App
path = Path()
learn_inf = load_learner(path/'final_model.pkl', cpu=True)
book_factors = learn_inf.model.i_weight.weight
img = Image.open('header.png')
books = pd.read_csv('books.csv')
def selectbox_with_default(text, values, default, sidebar=False):
func = st.sidebar.selectbox if sidebar else st.selectbox
return func(text, np.insert(np.array(values, object), 0, default))
def get_similar_books(title, number):
idx = learn_inf.dls.classes['original_title'].o2i[title]
distances = nn.CosineSimilarity(dim=1)(book_factors, book_factors[idx][None])
idx = distances.argsort(descending=True)[1:number+1]
similar = [learn_inf.dls.classes['original_title'][i] for i in idx]
ids = [int(books.loc[books['original_title']==str(i)]['goodreads_book_id'].values[0]) for i in similar]
urls = [f'https://www.goodreads.com/book/show/{id}' for id in ids]
return similar, urls
# APP
st.image(img, width=200)
st.title('SIMILAR BOOKS')
st.subheader('A Book Recommendation System')
"Here's the [GitHub](https://github.com/jimmiemunyi/SimilarBooks) repo."
st.info("Start typing and you will get suggestions of Books we currently have. We Currently have support for 10, 000 Books!")
title = selectbox_with_default("Which Book Do you want Recommendations From:",
books['original_title'], default='Select A Book')
number = st.slider("How many Similar Books do you want?", 1, 10, value=5)
if(st.button("Suggest Similar Books")):
similar, urls = get_similar_books(title, number)
st.subheader('Here are your Book Recommendations. Enjoy!')
for book, url in zip(similar, urls):
st.write(f'{book}: {url}')
st.title('Developer Details')
'''
My name is Jimmie Munyi. You can connect with me on [Twitter](https://twitter.com/jimmie_munyi). You can check out other projects I have done from [My GitHub](https://github.com/jimmiemunyi) and from [My Blog](https://jimmiemunyi.github.io/blog/).
If you wish to see how Similar Books was created, read this [blog post](https://jimmiemunyi.github.io/blog/projects/tutorial/2021/02/15/Book-Recommendation-Model-Training.html).
'''