!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)