new_recommender_system_nlp2 / final_recommender.py
bharatverse11's picture
Update final_recommender.py
83bb1bd verified
"""
FINAL SMART RECOMMENDER SYSTEM
Embeddings + Intent + Filtering + Reranking + Keyword Boosting
"""
from filtered_search_engine import SmartRecommender
from reranker import Reranker
from keyword_boosting_layer import apply_keyword_boost
import pandas as pd
class FinalSalahkar:
def __init__(self):
print("✨ Initializing Final AI Recommender...")
self.engine = SmartRecommender()
self.reranker = Reranker()
self.df = pd.read_csv("salahkar_enhanced.csv")
# Optimization: Pre-compute name-to-row mapping for O(1) lookup
# This is much faster than running df[df["name"] == name] for every result
self.name_map = self.df.set_index("name").to_dict('index')
print("πŸš€ System Ready!")
def ask(self, query, k=7):
print("\n==============================================")
print(f"🧠 INPUT QUERY β†’ {query}")
print("==============================================")
# STEP 1 β†’ BASE SEARCH (filtered FAISS)
# Now returns (results_list, detected_intent)
results, intent = self.engine.recommend(query, k=k)
# STEP 2 β†’ Prepare embedding text for reranking
prepared = []
for item in results:
name = item["name"]
# Optimization: FAST LOOKUP
row = self.name_map.get(name)
if row:
prepared.append({
"name": name,
"domain": item["domain"],
"category": item["category"],
"region": item["region"],
"embedding_score": item["score"],
"text": row["search_embedding_text"], # Use index text for reranking
"intent": intent
})
# STEP 3 β†’ Cross-Encoder Reranking
ranked = self.reranker.rerank(query, prepared)
# STEP 4 β†’ Keyword Boost (final scoring)
# This applies the location/food/heritage boosts we configured
boosted = apply_keyword_boost(query, ranked)
# STEP 5 β†’ Display final sorted results
print("\nπŸ† FINAL SMART RANKED RESULTS:")
for i, item in enumerate(boosted[:k]):
score = item.get('final_score', item.get('rerank_score', 0))
print(f"{i+1}. {item['name']} | Final Score: {round(score, 3)}")
return boosted
if __name__ == "__main__":
bot = FinalSalahkar()
# Test the complex new queries to verify accuracy
bot.ask("romantic historical place india")
bot.ask("spiritual peaceful temple")
bot.ask("best south indian spicy breakfast")
bot.ask("sweet festival food india")
bot.ask("famous beaches near ongole") # Test new data point