Suriya
First commit
8807f0d
import numpy as np
import streamlit as st
class Recommender:
def __init__(self, df, embeddings, search_engine, embedder):
self.df = df
self.embeddings = embeddings
self.search_engine = search_engine
self.embedder = embedder
def recommend(self, book_title: str, top_k=5):
if book_title not in set(self.df["book_name"].values):
raise ValueError(f"Book '{book_title}' not found in dataset.")
# if book_tile == "The Power Of Full Engagement":
# raise ValueError(f"Book '{book_title}' has no summary found in dataset.")
idx = self.df[self.df["book_name"] == book_title].index[0]
# st.write(idx)
query_vec = self.embeddings[idx].reshape(1, -1)
labels, distances = self.search_engine.search(query_vec, top_k=top_k + 1)
# st.write(labels)
results = []
for label, dist in zip(labels, distances):
if label == idx:
continue
results.append({
"book_name": self.df.iloc[label]["book_name"],
"summaries": self.df.iloc[label]["summaries"],
"categories": self.df.iloc[label]["categories"],
"score": round(1 - dist, 3)
})
return self.df.iloc[idx], results[:top_k]