Update app.py
Browse files
app.py
CHANGED
@@ -544,20 +544,33 @@ def clean_text(text):
|
|
544 |
return re.sub(r'[^آ-ی۰-۹0-9،.؟!؛+\-* ]+', '', text)
|
545 |
|
546 |
|
547 |
-
def
|
|
|
548 |
scores = [(f, fuzz.partial_ratio(query, f)) for f in filenames]
|
549 |
scores.sort(key=lambda x: x[1], reverse=True)
|
550 |
-
return
|
551 |
|
|
|
|
|
|
|
552 |
|
553 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
554 |
if query:
|
555 |
-
|
|
|
556 |
|
557 |
-
if
|
558 |
-
matched_text = doc_texts[closest_file]
|
559 |
-
st.markdown(scores[0][0])
|
560 |
-
st.markdown(matched_text)
|
561 |
prompt = f"""
|
562 |
لطفاً با توجه به سؤال زیر و محتوای سند موجود، یک پاسخ نهایی حرفهای، دقیق و روان تولید کن. فقط از متن سند استفاده کن. اگر اطلاعات کافی در متن وجود ندارد، صادقانه اعلام کن.
|
563 |
سوال:
|
@@ -574,8 +587,7 @@ if query:
|
|
574 |
rewritten = clean_text(response.content.strip())
|
575 |
|
576 |
st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
|
577 |
-
think.empty()
|
578 |
|
579 |
else:
|
580 |
st.warning("هیچ سند مرتبطی پیدا نشد.")
|
581 |
-
|
|
|
544 |
return re.sub(r'[^آ-ی۰-۹0-9،.؟!؛+\-* ]+', '', text)
|
545 |
|
546 |
|
547 |
+
def find_closest_filenames(query, filenames, top_n=3):
|
548 |
+
# گرفتن نزدیکترین فایلها بر اساس شباهت
|
549 |
scores = [(f, fuzz.partial_ratio(query, f)) for f in filenames]
|
550 |
scores.sort(key=lambda x: x[1], reverse=True)
|
551 |
+
return [score[0] for score in scores[:top_n]] # برگشت دادن N فایل با بیشترین شباهت
|
552 |
|
553 |
+
def find_best_answer(query, top_files, doc_texts):
|
554 |
+
best_match = None
|
555 |
+
best_score = 0
|
556 |
|
557 |
+
# بررسی محتوای فایلها
|
558 |
+
for filename in top_files:
|
559 |
+
text = doc_texts[filename]
|
560 |
+
similarity = fuzz.partial_ratio(query, text) # مقایسه سوال با محتوای فایل
|
561 |
+
if similarity > best_score:
|
562 |
+
best_score = similarity
|
563 |
+
best_match = filename
|
564 |
+
|
565 |
+
return best_match, doc_texts.get(best_match, "")
|
566 |
+
|
567 |
+
|
568 |
+
# حالا این رو در کد اصلی استفاده میکنیم:
|
569 |
if query:
|
570 |
+
top_files = find_closest_filenames(query, list(doc_texts.keys()), top_n=3)
|
571 |
+
best_file, matched_text = find_best_answer(query, top_files, doc_texts)
|
572 |
|
573 |
+
if best_file:
|
|
|
|
|
|
|
574 |
prompt = f"""
|
575 |
لطفاً با توجه به سؤال زیر و محتوای سند موجود، یک پاسخ نهایی حرفهای، دقیق و روان تولید کن. فقط از متن سند استفاده کن. اگر اطلاعات کافی در متن وجود ندارد، صادقانه اعلام کن.
|
576 |
سوال:
|
|
|
587 |
rewritten = clean_text(response.content.strip())
|
588 |
|
589 |
st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
|
|
|
590 |
|
591 |
else:
|
592 |
st.warning("هیچ سند مرتبطی پیدا نشد.")
|
593 |
+
|