Spaces:
Runtime error
Runtime error
added the code
Browse files- .gitignore +3 -0
- app.py +56 -0
- books.csv +0 -0
- final_model.pkl +3 -0
- header.png +0 -0
- requirements.txt +2 -0
.gitignore
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
venv/
|
| 2 |
+
|
| 3 |
+
.python-version
|
app.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# imports
|
| 2 |
+
import streamlit as st
|
| 3 |
+
from fastai.learner import load_learner
|
| 4 |
+
from fastai.tabular.all import *
|
| 5 |
+
from PIL import Image
|
| 6 |
+
|
| 7 |
+
# Preprocessing of App
|
| 8 |
+
path = Path()
|
| 9 |
+
learn_inf = load_learner(path/'final_model.pkl', cpu=True)
|
| 10 |
+
book_factors = learn_inf.model.i_weight.weight
|
| 11 |
+
img = Image.open('header.png')
|
| 12 |
+
books = pd.read_csv('books.csv')
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
def selectbox_with_default(text, values, default, sidebar=False):
|
| 16 |
+
func = st.sidebar.selectbox if sidebar else st.selectbox
|
| 17 |
+
return func(text, np.insert(np.array(values, object), 0, default))
|
| 18 |
+
|
| 19 |
+
def get_similar_books(title, number):
|
| 20 |
+
idx = learn_inf.dls.classes['original_title'].o2i[title]
|
| 21 |
+
distances = nn.CosineSimilarity(dim=1)(book_factors, book_factors[idx][None])
|
| 22 |
+
idx = distances.argsort(descending=True)[1:number+1]
|
| 23 |
+
similar = [learn_inf.dls.classes['original_title'][i] for i in idx]
|
| 24 |
+
ids = [int(books.loc[books['original_title']==str(i)]['goodreads_book_id'].values[0]) for i in similar]
|
| 25 |
+
urls = [f'https://www.goodreads.com/book/show/{id}' for id in ids]
|
| 26 |
+
return similar, urls
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
# APP
|
| 30 |
+
st.image(img, width=200)
|
| 31 |
+
st.title('SIMILAR BOOKS')
|
| 32 |
+
st.subheader('A Book Recommendation System')
|
| 33 |
+
"Here's the [GitHub](https://github.com/jimmiemunyi/SimilarBooks) repo."
|
| 34 |
+
|
| 35 |
+
st.info("Start typing and you will get suggestions of Books we currently have. We Currently have support for 10, 000 Books!")
|
| 36 |
+
title = selectbox_with_default("Which Book Do you want Recommendations From:",
|
| 37 |
+
books['original_title'], default='Select A Book')
|
| 38 |
+
number = st.slider("How many Similar Books do you want?", 1, 10, value=5)
|
| 39 |
+
|
| 40 |
+
if(st.button("Suggest Similar Books")):
|
| 41 |
+
similar, urls = get_similar_books(title, number)
|
| 42 |
+
st.subheader('Here are your Book Recommendations. Enjoy!')
|
| 43 |
+
for book, url in zip(similar, urls):
|
| 44 |
+
st.write(f'{book}: {url}')
|
| 45 |
+
|
| 46 |
+
st.title('Developer Details')
|
| 47 |
+
'''
|
| 48 |
+
|
| 49 |
+
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/).
|
| 50 |
+
|
| 51 |
+
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).
|
| 52 |
+
|
| 53 |
+
'''
|
| 54 |
+
del books
|
| 55 |
+
|
| 56 |
+
|
books.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
final_model.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:941a60c4dc13dc42e12f7620fefd1d496d60f022c6cb96bf75bf1261b89e953a
|
| 3 |
+
size 138427415
|
header.png
ADDED
|
requirements.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastai>=2
|
| 2 |
+
packaging
|