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("