import gradio as gr from transformers import pipeline import PyPDF2 import pandas as pd from fpdf import FPDF from datetime import datetime import langdetect # 🎯 مدل‌های عمومی سبک برای فارسی و انگلیسی fa_summarizer = pipeline("text2text-generation", model="google/mt5-small") en_summarizer = pipeline("summarization", model="facebook/bart-large-cnn") # تشخیص زبان def detect_language(text): try: lang = langdetect.detect(text) return "fa" if lang == "fa" else "en" except: return "fa" # خلاصه‌سازی متن (دو زبانه) def summarize_text(text): if not text.strip(): return "⚠️ لطفاً متن وارد کنید." lang = detect_language(text) if lang == "fa": prompt = f"لطفاً این متن را خلاصه کن:\n{text}" result = fa_summarizer(prompt, max_length=150, min_length=30, do_sample=False) return result[0]["generated_text"] else: result = en_summarizer(text, max_length=150, min_length=30, do_sample=False) return result[0]["summary_text"] # خلاصه‌سازی PDF def summarize_pdf(file_path): try: reader = PyPDF2.PdfReader(file_path) text = "" for page in reader.pages: txt = page.extract_text() if txt: text += txt + "\n" return summarize_text(text) except Exception as e: return f"❌ خطا در خواندن PDF: {e}" # ذخیره‌سازی به PDF def save_to_pdf(text, summary): filename = f"summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}.pdf" pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.multi_cell(0, 10, f"📄 Original Text:\n\n{text}\n\n---\n\n📝 Summary:\n\n{summary}") pdf.output(filename) return filename # ذخیره‌سازی به Excel def save_to_excel(text, summary): filename = f"summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx" df = pd.DataFrame({"Original Text": [text], "Summary": [summary]}) df.to_excel(filename, index=False) return filename # 🎨 رابط کاربری with gr.Blocks(css=""" body { font-family: Vazir, sans-serif; background: linear-gradient(120deg, #6a4cff, #00c9b7); } h1 { font-weight: bold; color: white; text-align: center; padding: 20px; background: rgba(255,255,255,0.08); border-radius: 8px; } .tab { background-color: white; border-radius: 12px; padding: 20px; box-shadow: 0px 4px 15px rgba(0,0,0,0.1); } button { border-radius: 8px !important; font-weight: bold; } """) as demo: gr.HTML("

📝 SummarizeX Pro — Persian & English Text Summarizer

") with gr.Tab("🖊 خلاصه‌سازی متن"): text_input = gr.Textbox(lines=10, placeholder="Paste your Persian or English text here...") summary_output = gr.Textbox(lines=8, label="Summary") btn_summary = gr.Button("✨ Summarize") pdf_btn = gr.Button("📄 Save to PDF") excel_btn = gr.Button("📊 Save to Excel") file_pdf_out = gr.File(label="Download PDF") file_excel_out = gr.File(label="Download Excel") btn_summary.click(summarize_text, inputs=text_input, outputs=summary_output) pdf_btn.click(lambda t, s: save_to_pdf(t, s), inputs=[text_input, summary_output], outputs=file_pdf_out) excel_btn.click(lambda t, s: save_to_excel(t, s), inputs=[text_input, summary_output], outputs=file_excel_out) with gr.Tab("📂 خلاصه‌سازی PDF"): pdf_input = gr.File(type="filepath", file_types=[".pdf"], label="Upload PDF File") pdf_summary_output = gr.Textbox(lines=8, label="Summary") btn_pdf_summary = gr.Button("✨ Summarize PDF") pdf_btn2 = gr.Button("📄 Save to PDF") excel_btn2 = gr.Button("📊 Save to Excel") file_pdf_out2 = gr.File(label="Download PDF") file_excel_out2 = gr.File(label="Download Excel") btn_pdf_summary.click(summarize_pdf, inputs=pdf_input, outputs=pdf_summary_output) pdf_btn2.click(lambda f, s: save_to_pdf("PDF File", s), inputs=[pdf_input, pdf_summary_output], outputs=file_pdf_out2) excel_btn2.click(lambda f, s: save_to_excel("PDF File", s), inputs=[pdf_input, pdf_summary_output], outputs=file_excel_out2) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)