IAUCourseExp commited on
Commit
6d64952
·
verified ·
1 Parent(s): c215aac

Upload 2 files

Browse files
Files changed (2) hide show
  1. cleaned_iau_reviews.csv +0 -0
  2. my_logic.py +16 -30
cleaned_iau_reviews.csv ADDED
The diff for this file is too large to render. See raw diff
 
my_logic.py CHANGED
@@ -1,8 +1,9 @@
1
-
2
  from collections import defaultdict
3
  from difflib import SequenceMatcher
4
 
5
- # NOTE: You must define search_reviews, filter_relevant, metadata, etc.
 
6
 
7
  def similar(a, b):
8
  return SequenceMatcher(None, a, b).ratio()
@@ -55,9 +56,9 @@ def build_strict_context(reviews, user_question):
55
  else:
56
  filtered = reviews
57
 
58
- result = f"👨‍🏫 استاد: {best_prof or '[نامشخص]'} — 📚 درس: {best_course or '[نامشخص]'}\\n💬 نظرات:\\n"
59
  for i, r in enumerate(filtered, 1):
60
- result += f"{i}. {r['comment'].strip()}\\n🔗 لینک: {r['link']}\\n\\n"
61
  return result
62
 
63
  def truncate_reviews_to_fit(reviews, max_chars=127000):
@@ -72,29 +73,16 @@ def truncate_reviews_to_fit(reviews, max_chars=127000):
72
  return final
73
 
74
  def answer_question(user_question, model):
75
- print(f"\\n🧠 Starting debug for question: {user_question}")
76
- retrieved = search_reviews(user_question, top_k=100)
77
- print(f"🔍 FAISS returned {len(retrieved)} raw rows")
78
- retrieved = filter_relevant(retrieved, user_question)
79
- print(f"✅ After filter_relevant(): {len(retrieved)} rows")
80
- keyword_hits = keyword_match_reviews(user_question, metadata)
81
- print(f"🔠 Keyword hits found: {len(keyword_hits)}")
82
- existing_links = set(r["link"] for r in retrieved)
83
- added = 0
84
- for r in keyword_hits:
85
- if r["link"] not in existing_links:
86
- retrieved.append(r)
87
- added += 1
88
- print(f"➕ Added {added} unique fallback keyword rows")
89
- print(f"📊 Total before truncation: {len(retrieved)}")
90
  if not retrieved:
91
  return "❌ هیچ تجربه‌ای در مورد سوال شما در داده‌های کانال یافت نشد."
 
92
  retrieved.sort(key=lambda r: relevance_score(r, user_question), reverse=True)
93
  retrieved = truncate_reviews_to_fit(retrieved)
94
- print(f"✂️ After truncation: {len(retrieved)} rows")
95
  context = build_strict_context(retrieved, user_question)
96
- print("📝 Sample context sent to Gemini:\\n", context[:1000], "\\n...")
97
- prompt = f"""شما یک دستیار هوشمند انتخاب واحد هستید که فقط و فقط بر اساس نظرات واقعی دانشجویان از کانال @IAUCourseExp پاسخ می‌دهید. کار شما کمک به دانشجویان برای انتخاب استاد و درس، بر اساس تجربیات ثبت‌شده در این کانال است.
98
 
99
  ❗ قوانین مهم:
100
  - فقط از داده‌های همین نظرات استفاده کن. هیچ اطلاعات اضافی، حدسی یا اینترنتی استفاده نکن.
@@ -104,20 +92,18 @@ def answer_question(user_question, model):
104
  • مقایسه چند استاد برای یک درس
105
  • معرفی بهترین یا بدترین استادهای یک درس
106
  • تحلیل نظر کلی دانشجویان درمورد یک درس خاص
107
- بنابراین آماده باش که با توجه به داده‌ها به هر نوع سوال، دقیق و قابل اعتماد پاسخ بدهی.
108
- - همه‌ی نظرات مربوط به سوال را بررسی کن (نه فقط یکی یا دو تا) و به‌صورت فهرست‌وار یا خلاصه‌شده تحلیلشان کن.
109
- - برای هر نظر، لینک تلگرام مربوطه را نیز حتماً ذکر کن.
110
- - در پایان پاسخ، نتیجه‌گیری نهایی خود را بنویس: آیا این استاد برای این درس توصیه می‌شود یا نه — فقط بر اساس همین نظرات.
111
- - در انتها حتماً بنویس:
112
- 📊 این پاسخ بر اساس بررسی {len(retrieved)} نظر دانشجویی نوشته شده است.
113
 
114
  🔎 سوال دانشجو:
115
  {user_question}
116
 
117
- 📄 نظرات دانشجویان (برگرفته از کانال تجربیات انتخاب واحد):
118
  {context}
119
 
120
  📘 پاسخ نهایی:
 
121
  """
 
122
  response = model.generate_content(prompt)
123
- return response.text
 
1
+ import pandas as pd
2
  from collections import defaultdict
3
  from difflib import SequenceMatcher
4
 
5
+ # Load reviews CSV
6
+ metadata = pd.read_csv("cleaned_iau_reviews.csv").to_dict(orient="records")
7
 
8
  def similar(a, b):
9
  return SequenceMatcher(None, a, b).ratio()
 
56
  else:
57
  filtered = reviews
58
 
59
+ result = f"👨‍🏫 استاد: {best_prof or '[نامشخص]'} — 📚 درس: {best_course or '[نامشخص]'}\n💬 نظرات:\n"
60
  for i, r in enumerate(filtered, 1):
61
+ result += f"{i}. {r['comment'].strip()}\n🔗 لینک: {r['link']}\n\n"
62
  return result
63
 
64
  def truncate_reviews_to_fit(reviews, max_chars=127000):
 
73
  return final
74
 
75
  def answer_question(user_question, model):
76
+ print(f"\n🧠 Starting debug for question: {user_question}")
77
+ retrieved = keyword_match_reviews(user_question, metadata)
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  if not retrieved:
79
  return "❌ هیچ تجربه‌ای در مورد سوال شما در داده‌های کانال یافت نشد."
80
+
81
  retrieved.sort(key=lambda r: relevance_score(r, user_question), reverse=True)
82
  retrieved = truncate_reviews_to_fit(retrieved)
 
83
  context = build_strict_context(retrieved, user_question)
84
+
85
+ prompt = f"""شما یک دستیار هوشمند انتخاب واحد هستید که فقط و فقط بر اساس نظرات واقعی دانشجویان از کانال @IAUCourseExp پاسخ می‌دهید.
86
 
87
  ❗ قوانین مهم:
88
  - فقط از داده‌های همین نظرات استفاده کن. هیچ اطلاعات اضافی، حدسی یا اینترنتی استفاده نکن.
 
92
  • مقایسه چند استاد برای یک درس
93
  • معرفی بهترین یا بدترین استادهای یک درس
94
  • تحلیل نظر کلی دانشجویان درمورد یک درس خاص
95
+ - همه‌ی نظرات مربوطه را تحلیل کن و لینکشان را هم بنویس.
96
+ - نتیجه‌گیری نهایی در انتها اضافه کن.
 
 
 
 
97
 
98
  🔎 سوال دانشجو:
99
  {user_question}
100
 
101
+ 📄 نظرات دانشجویان:
102
  {context}
103
 
104
  📘 پاسخ نهایی:
105
+ 📊 این پاسخ بر اساس بررسی {len(retrieved)} نظر دانشجویی نوشته شده است.
106
  """
107
+
108
  response = model.generate_content(prompt)
109
+ return response.text