Batnini commited on
Commit
6d140cb
·
verified ·
1 Parent(s): fd8f8ea

Update tools/quran_search.py

Browse files
Files changed (1) hide show
  1. tools/quran_search.py +10 -3
tools/quran_search.py CHANGED
@@ -92,7 +92,7 @@ class QuranSearchEngine:
92
 
93
  try:
94
  self.model = SentenceTransformer(MODEL_NAME)
95
- verse_texts = [v['text'] for v in self.all_verses]
96
  self.verse_embeddings = []
97
  for i in range(0, len(verse_texts), CHUNK_SIZE):
98
  chunk = verse_texts[i:i + CHUNK_SIZE]
@@ -144,7 +144,10 @@ class QuranSearchEngine:
144
  return self._keyword_fallback_search(query, top_k)
145
 
146
  try:
147
- query_embedding = self.model.encode([query], convert_to_tensor=False)
 
 
 
148
  similarities = cosine_similarity(query_embedding, self.verse_embeddings)[0]
149
  top_indices = np.argsort(similarities)[-top_k:][::-1]
150
 
@@ -152,10 +155,12 @@ class QuranSearchEngine:
152
  for idx in top_indices:
153
  verse = self.all_verses[idx]
154
  surah_name = next((s.get('surahNameArabicLong', s.get('name', '')) for s in self.surahs if s['id'] == verse['surah_id']), f"سورة {verse['surah_id']}")
 
 
155
  results.append(
156
  f"سورة {surah_name} - آية {verse['verse_num']}:\n{verse['text']}"
157
  )
158
- return "\n\n".join(results)
159
  except Exception as e:
160
  self.logger.error(f"Search failed: {e}")
161
  return "حدث خطأ أثناء البحث. جرب مرة أخرى."
@@ -166,6 +171,8 @@ class QuranSearchEngine:
166
  for verse in self.all_verses:
167
  if query_lower in verse['text'].lower():
168
  surah_name = next((s.get('surahNameArabicLong', s.get('name', '')) for s in self.surahs if s['id'] == verse['surah_id']), f"سورة {verse['surah_id']}")
 
 
169
  matches.append(f"سورة {surah_name} - آية {verse['verse_num']}:\n{verse['text']}")
170
  return "\n\n".join(matches[:top_k]) or "لا توجد نتائج مطابقة."
171
 
 
92
 
93
  try:
94
  self.model = SentenceTransformer(MODEL_NAME)
95
+ verse_texts = ["passage: " + v['text'] for v in self.all_verses] # Add prefix for e5 model
96
  self.verse_embeddings = []
97
  for i in range(0, len(verse_texts), CHUNK_SIZE):
98
  chunk = verse_texts[i:i + CHUNK_SIZE]
 
144
  return self._keyword_fallback_search(query, top_k)
145
 
146
  try:
147
+ # Add context for single words or short queries
148
+ if len(query.split()) <= 1:
149
+ query = f"معنى كلمة {query}" # Add context: "meaning of the word"
150
+ query_embedding = self.model.encode(["query: " + query], convert_to_tensor=False)
151
  similarities = cosine_similarity(query_embedding, self.verse_embeddings)[0]
152
  top_indices = np.argsort(similarities)[-top_k:][::-1]
153
 
 
155
  for idx in top_indices:
156
  verse = self.all_verses[idx]
157
  surah_name = next((s.get('surahNameArabicLong', s.get('name', '')) for s in self.surahs if s['id'] == verse['surah_id']), f"سورة {verse['surah_id']}")
158
+ if surah_name.startswith("سورة "):
159
+ surah_name = surah_name[len("سورة "):]
160
  results.append(
161
  f"سورة {surah_name} - آية {verse['verse_num']}:\n{verse['text']}"
162
  )
163
+ return "\n\n".join(results) or "لا توجد نتائج ذات صلة."
164
  except Exception as e:
165
  self.logger.error(f"Search failed: {e}")
166
  return "حدث خطأ أثناء البحث. جرب مرة أخرى."
 
171
  for verse in self.all_verses:
172
  if query_lower in verse['text'].lower():
173
  surah_name = next((s.get('surahNameArabicLong', s.get('name', '')) for s in self.surahs if s['id'] == verse['surah_id']), f"سورة {verse['surah_id']}")
174
+ if surah_name.startswith("سورة "):
175
+ surah_name = surah_name[len("سورة "):]
176
  matches.append(f"سورة {surah_name} - آية {verse['verse_num']}:\n{verse['text']}")
177
  return "\n\n".join(matches[:top_k]) or "لا توجد نتائج مطابقة."
178