egecandrsn commited on
Commit
2ed37e4
1 Parent(s): a4f2907

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -8
app.py CHANGED
@@ -1,25 +1,28 @@
1
  import streamlit as st
2
  import pandas as pd
3
  import numpy as np
 
4
 
5
  books = pd.read_csv("books.csv")
6
  books["Book-Title"] = books["Book-Title"] + " by " + books["Book-Author"]
7
  weighted_similarity = np.load("weighted_similarity.npy")
8
 
 
9
  def recommend_books(input_books, top_n=5):
10
  recommended_books_set = set()
11
- vector_sum = np.zeros_like(weighted_similarity[0])
12
  for book_title in input_books:
13
  if book_title in books['Book-Title'].values:
14
  book_index = books[books['Book-Title'] == book_title].index[0]
15
- vector_sum += weighted_similarity[book_index]
16
-
17
- vector_sum /= np.linalg.norm(vector_sum)
18
- similarities = np.dot(weighted_similarity, vector_sum)
19
- top_books_indices = similarities.argsort()[-top_n:][::-1]
 
 
20
  recommended_books_set.update(books.loc[top_books_indices, 'Book-Title'])
21
-
22
- recommended_books_list = list(recommended_books_set)
23
  return recommended_books_list
24
 
25
 
 
1
  import streamlit as st
2
  import pandas as pd
3
  import numpy as np
4
+ from sklearn.metrics.pairwise import cosine_similarity
5
 
6
  books = pd.read_csv("books.csv")
7
  books["Book-Title"] = books["Book-Title"] + " by " + books["Book-Author"]
8
  weighted_similarity = np.load("weighted_similarity.npy")
9
 
10
+
11
  def recommend_books(input_books, top_n=5):
12
  recommended_books_set = set()
13
+ book_vectors = []
14
  for book_title in input_books:
15
  if book_title in books['Book-Title'].values:
16
  book_index = books[books['Book-Title'] == book_title].index[0]
17
+ book_vectors.append(weighted_similarity[book_index])
18
+ # Sum the vectors
19
+ summed_vector = np.sum(book_vectors, axis=0)
20
+ # Calculate cosine similarity
21
+ cosine_sim = cosine_similarity(summed_vector.reshape(1, -1), weighted_similarity)
22
+ # Get top book indices
23
+ top_books_indices = cosine_sim.argsort()[0][-top_n - 1:-1][::-1]
24
  recommended_books_set.update(books.loc[top_books_indices, 'Book-Title'])
25
+ recommended_books_list = list(recommended_books_set)[:top_n]
 
26
  return recommended_books_list
27
 
28