yasamankm commited on
Commit
b2671d9
·
verified ·
1 Parent(s): bdf1590

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -81
app.py CHANGED
@@ -1,81 +1,43 @@
1
- !pip install transformers accelerate torch PyPDF2 gradio --quiet
2
-
3
- import gradio as gr
4
- from transformers import pipeline
5
- import PyPDF2
6
-
7
- # ===== مدل‌ها =====
8
- # مدل خلاصه‌سازی فارسی (عمومی)
9
- persian_summarizer = pipeline(
10
- "summarization",
11
- model="m3hrdadfi/bert2bert-fa-summarization",
12
- tokenizer="m3hrdadfi/bert2bert-fa-summarization"
13
- )
14
-
15
- # مدل خلاصه‌سازی انگلیسی (عمومی و سبک)
16
- english_summarizer = pipeline(
17
- "summarization",
18
- model="facebook/bart-large-cnn"
19
- )
20
-
21
- # ===== توابع =====
22
- def extract_text_from_pdf(pdf_file):
23
- """استخراج متن از فایل PDF"""
24
- pdf_reader = PyPDF2.PdfReader(pdf_file)
25
- text = ""
26
- for page in pdf_reader.pages:
27
- page_text = page.extract_text()
28
- if page_text:
29
- text += page_text + "\n"
30
- return text
31
-
32
- def summarize_document(language, text, pdf):
33
- """خلاصه‌سازی متن یا PDF بر اساس زبان انتخابی"""
34
- if pdf is not None:
35
- text = extract_text_from_pdf(pdf)
36
-
37
- if not text or len(text.strip()) < 50:
38
- return "❗ لطفاً یک متن یا فایل PDF معتبر و حداقل ۵۰ کاراکتر وارد کنید."
39
-
40
- # انتخاب مدل بر اساس زبان
41
- if language == "Persian":
42
- summarizer = persian_summarizer
43
- max_chunk = 500
44
- else:
45
- summarizer = english_summarizer
46
- max_chunk = 1024
47
-
48
- # شکستن متن به بخش‌های کوچکتر
49
- text = text.strip().replace("\n", " ")
50
- chunks = [text[i:i+max_chunk] for i in range(0, len(text), max_chunk)]
51
-
52
- summary = ""
53
- for chunk in chunks:
54
- result = summarizer(
55
- chunk,
56
- max_length=150,
57
- min_length=40,
58
- do_sample=False
59
- )[0]['summary_text']
60
- summary += result + "\n"
61
-
62
- return summary.strip()
63
-
64
- # ===== رابط Gradio =====
65
- with gr.Blocks() as demo:
66
- gr.Markdown("## 📄 SummarizeX – AI Text & PDF Summarizer 🌐")
67
- gr.Markdown("خلاصه‌ساز هوش مصنوعی برای متن و PDF – پشتیبانی از فارسی و انگلیسی")
68
-
69
- with gr.Row():
70
- language = gr.Radio(["Persian", "English"], label="زبان خلاصه‌سازی", value="Persian")
71
-
72
- with gr.Row():
73
- pdf_input = gr.File(label="آپلود PDF", file_types=[".pdf"])
74
- text_input = gr.Textbox(label="یا متن را وارد کنید", lines=8, placeholder="متن را اینجا وارد کنید...")
75
-
76
- summarize_button = gr.Button("خلاصه کن / Summarize")
77
- output_box = gr.Textbox(label="خلاصه نهایی", lines=8)
78
-
79
- summarize_button.click(summarize_document, inputs=[language, text_input, pdf_input], outputs=output_box)
80
-
81
- demo.launch(share=True)
 
1
+ import gradio as gr
2
+ from transformers import pipeline
3
+ import PyPDF2
4
+
5
+ # لود مدل یکبار هنگام شروع اپ
6
+ summarizer = pipeline(
7
+ "summarization",
8
+ model="m3hrdadfi/mt5-small-parsinlu-summarization-fa"
9
+ )
10
+
11
+ def summarize_text(text):
12
+ if not text.strip():
13
+ return "متنی وارد نشده است."
14
+ result = summarizer(text, max_length=150, min_length=30)
15
+ return result[0]["summary_text"]
16
+
17
+ def summarize_pdf(file):
18
+ try:
19
+ reader = PyPDF2.PdfReader(file.name)
20
+ text = ""
21
+ for page in reader.pages:
22
+ text += page.extract_text() + "\n"
23
+ return summarize_text(text)
24
+ except Exception as e:
25
+ return f"خطا در خواندن PDF: {e}"
26
+
27
+ with gr.Blocks() as demo:
28
+ gr.Markdown("# 📝 SummarizeX — خلاصه‌ساز متن و PDF")
29
+
30
+ with gr.Tab("خلاصه متن"):
31
+ input_text = gr.Textbox(lines=12, placeholder="متن را اینجا وارد کنید...")
32
+ output_summary = gr.Textbox(lines=8, label="خلاصه متن")
33
+ btn1 = gr.Button("خلاصه کن")
34
+ btn1.click(summarize_text, inputs=input_text, outputs=output_summary)
35
+
36
+ with gr.Tab("خلاصه PDF"):
37
+ pdf_input = gr.File(type="file", file_types=[".pdf"])
38
+ pdf_output = gr.Textbox(lines=8, label="خلاصه PDF")
39
+ btn2 = gr.Button("خلاصه PDF")
40
+ btn2.click(summarize_pdf, inputs=pdf_input, outputs=pdf_output)
41
+
42
+ if __name__ == "__main__":
43
+ demo.launch(server_name="0.0.0.0", server_port=7860)