yasamankm commited on
Commit
30b5300
·
verified ·
1 Parent(s): 4d55521

Upload 2 files

Browse files
Files changed (2) hide show
  1. api.py +81 -0
  2. requirements.txt +4 -0
api.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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)
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ gradio
2
+ transformers
3
+ pypdf2
4
+ torch