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