markobinario commited on
Commit
04963f4
Β·
verified Β·
1 Parent(s): 3b058e3

Update database_recommender.py

Browse files
Files changed (1) hide show
  1. database_recommender.py +43 -0
database_recommender.py CHANGED
@@ -4,6 +4,8 @@ from sklearn.neighbors import KNeighborsClassifier
4
  from sklearn.preprocessing import LabelEncoder, StandardScaler
5
  import joblib
6
  import json
 
 
7
 
8
  class CourseRecommender:
9
  def __init__(self):
@@ -279,6 +281,47 @@ class CourseRecommender:
279
  self.scaler = model_data['scaler']
280
  self.label_encoders = model_data['label_encoders']
281
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  # Example usage
283
  if __name__ == "__main__":
284
  recommender = CourseRecommender()
 
4
  from sklearn.preprocessing import LabelEncoder, StandardScaler
5
  import joblib
6
  import json
7
+ import os
8
+ import requests
9
 
10
  class CourseRecommender:
11
  def __init__(self):
 
281
  self.scaler = model_data['scaler']
282
  self.label_encoders = model_data['label_encoders']
283
 
284
+
285
+ # ===== UI helper for Hugging Face integration =====
286
+ def get_course_recommendations_ui(recommender: "CourseRecommender", stanine, gwa, strand, hobbies) -> str:
287
+ if recommender is None:
288
+ return "Sorry, the recommendation system is not available at the moment. Please try again later."
289
+ try:
290
+ try:
291
+ stanine = int(stanine.strip()) if isinstance(stanine, str) else int(stanine)
292
+ except (ValueError, TypeError, AttributeError):
293
+ return "❌ Stanine score must be a valid number between 1 and 9"
294
+ try:
295
+ gwa = float(gwa.strip()) if isinstance(gwa, str) else float(gwa)
296
+ except (ValueError, TypeError, AttributeError):
297
+ return "❌ GWA must be a valid number between 75 and 100"
298
+ if not (1 <= stanine <= 9):
299
+ return "❌ Stanine score must be between 1 and 9"
300
+ if not (75 <= gwa <= 100):
301
+ return "❌ GWA must be between 75 and 100"
302
+ if not strand:
303
+ return "❌ Please select a strand"
304
+ if not hobbies or not str(hobbies).strip():
305
+ return "❌ Please enter your hobbies/interests"
306
+
307
+ recommendations = recommender.recommend_courses(
308
+ stanine=stanine,
309
+ gwa=gwa,
310
+ strand=strand,
311
+ hobbies=str(hobbies)
312
+ )
313
+ if not recommendations:
314
+ return "No recommendations available at the moment."
315
+ response = f"## 🎯 Course Recommendations for You\n\n"
316
+ response += f"**Profile:** Stanine {stanine}, GWA {gwa}, {strand} Strand\n"
317
+ response += f"**Interests:** {hobbies}\n\n"
318
+ for i, rec in enumerate(recommendations, 1):
319
+ response += f"### {i}. {rec['code']} - {rec['name']}\n"
320
+ response += f"**Match Score:** {rec.get('rating', rec.get('probability', 0)):.1f}%\n\n"
321
+ return response
322
+ except Exception as e:
323
+ return f"❌ Error getting recommendations: {str(e)}"
324
+
325
  # Example usage
326
  if __name__ == "__main__":
327
  recommender = CourseRecommender()