yasamankm's picture
Update app.py
a6aff7b verified
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("<h1>📝 SummarizeX Pro — Persian & English Text Summarizer</h1>")
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)