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)