Update app.py
Browse files
app.py
CHANGED
@@ -547,12 +547,33 @@ def find_closest_filenames(query, filenames, top_n=3):
|
|
547 |
scores.sort(key=lambda x: x[1], reverse=True)
|
548 |
return [score[0] for score in scores[:top_n]]
|
549 |
|
550 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
551 |
|
552 |
-
|
553 |
-
|
554 |
-
summary = summarizer(text, max_length=1024, min_length=512, do_sample=False)
|
555 |
-
return summary[0]['summary_text']
|
556 |
|
557 |
def find_best_answer(query, top_files, doc_texts):
|
558 |
best_match = None
|
@@ -567,13 +588,13 @@ def find_best_answer(query, top_files, doc_texts):
|
|
567 |
best_match = filename
|
568 |
best_text = text
|
569 |
|
570 |
-
# خلاصه کردن متن
|
571 |
if best_text:
|
572 |
-
summary =
|
573 |
else:
|
574 |
summary = "متنی برای خلاصهسازی پیدا نشد."
|
575 |
|
576 |
-
return summary
|
577 |
|
578 |
|
579 |
# حالا این رو در کد اصلی استفاده میکنیم:
|
|
|
547 |
scores.sort(key=lambda x: x[1], reverse=True)
|
548 |
return [score[0] for score in scores[:top_n]]
|
549 |
|
550 |
+
import re
|
551 |
+
import numpy as np
|
552 |
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
553 |
+
from sklearn.cluster import KMeans
|
554 |
+
from nltk.tokenize import sent_tokenize
|
555 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
556 |
+
|
557 |
+
# توابع کمکی
|
558 |
+
def clean_text(text):
|
559 |
+
return re.sub(r'[^آ-ی۰-۹0-9،.؟!؛+\-* ]+', '', text)
|
560 |
+
|
561 |
+
def summarize_text_with_kmeans(text, num_sentences=3):
|
562 |
+
sentences = sent_tokenize(text) # تقسیم متن به جملات
|
563 |
+
tfidf_vectorizer = TfidfVectorizer()
|
564 |
+
tfidf_matrix = tfidf_vectorizer.fit_transform(sentences) # تبدیل جملات به ماتریس TF-IDF
|
565 |
+
|
566 |
+
# الگوریتم خوشهبندی KMeans
|
567 |
+
kmeans = KMeans(n_clusters=1) # یک خوشه برای استخراج خلاصه
|
568 |
+
kmeans.fit(tfidf_matrix)
|
569 |
+
|
570 |
+
# پیدا کردن جملات نزدیک به مرکز خوشه
|
571 |
+
closest_centroid = kmeans.cluster_centers_[0]
|
572 |
+
similarities = cosine_similarity(tfidf_matrix, closest_centroid.reshape(1, -1))
|
573 |
+
similar_sentences_indices = similarities.flatten().argsort()[-num_sentences:][::-1] # انتخاب jملات نزدیک
|
574 |
|
575 |
+
summary = [sentences[i] for i in similar_sentences_indices]
|
576 |
+
return ' '.join(summary)
|
|
|
|
|
577 |
|
578 |
def find_best_answer(query, top_files, doc_texts):
|
579 |
best_match = None
|
|
|
588 |
best_match = filename
|
589 |
best_text = text
|
590 |
|
591 |
+
# خلاصه کردن متن با استفاده از KMeans
|
592 |
if best_text:
|
593 |
+
summary = summarize_text_with_kmeans(best_text)
|
594 |
else:
|
595 |
summary = "متنی برای خلاصهسازی پیدا نشد."
|
596 |
|
597 |
+
return best_match, summary
|
598 |
|
599 |
|
600 |
# حالا این رو در کد اصلی استفاده میکنیم:
|