| import streamlit as st |
| import pickle |
|
|
| def load_model(filename): |
| with open(filename, 'rb') as f: |
| return pickle.load(f) |
|
|
| |
| loaded_model = load_model('recommendation_model.pkl') |
|
|
| def get_recommendations(input_categories): |
| tfidf_vectorizer = loaded_model['tfidf_vectorizer'] |
| knn_classifier = loaded_model['knn_classifier'] |
| df = loaded_model['df'] |
|
|
| all_predictions = [] |
|
|
| for category in input_categories: |
| category_tfidf = tfidf_vectorizer.transform([category]) |
| top_20_indices = knn_classifier.kneighbors(category_tfidf, n_neighbors=20, return_distance=False)[0] |
| top_20_places = df.iloc[top_20_indices] |
| best_2_places = top_20_places.sort_values('normalized_score', ascending=False).head(2) |
| |
| all_predictions.append({ |
| 'category': category, |
| 'predictions': best_2_places[['name', 'rating', 'user_ratings_total', 'normalized_score']].to_dict('records') |
| }) |
|
|
| return all_predictions |
|
|
| |
| st.title("Place Recommendation System") |
|
|
| st.write("Enter the categories you are interested in (comma-separated):") |
| input_categories = st.text_input("Categories", "historical monuments, history tours, wildlife") |
|
|
| if st.button("Get Recommendations"): |
| categories_list = [category.strip() for category in input_categories.split(',')] |
| recommendations = get_recommendations(categories_list) |
|
|
| for prediction in recommendations: |
| st.subheader(f"Top 2 recommended places for '{prediction['category']}':") |
| for place in prediction['predictions']: |
| st.write(f"**Name:** {place['name']}") |
| st.write(f"**Rating:** {place['rating']:.2f}") |
| st.write(f"**Review Count:** {place['user_ratings_total']}") |
| st.write(f"**Score:** {place['normalized_score']:.4f}") |
| st.write("") |
|
|