File size: 4,469 Bytes
ae79b2b
 
 
 
e07f1c4
ae79b2b
d847984
ae79b2b
 
 
 
 
 
 
 
e07f1c4
 
 
 
 
 
 
ae79b2b
e07f1c4
 
 
 
 
 
 
ae79b2b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e07f1c4
 
 
 
 
 
 
 
ae79b2b
 
e07f1c4
 
 
 
 
 
 
 
 
 
ae79b2b
 
e07f1c4
ae79b2b
e07f1c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae79b2b
e07f1c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae79b2b
e07f1c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae79b2b
e07f1c4
 
 
 
 
ae79b2b
d847984
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import gradio as gr
from transformers import pipeline
import langid  # مكتبة للكشف عن اللغة


summarizer_en = pipeline("summarization", model="facebook/bart-large-cnn")
summarizer_ar = pipeline("summarization", model="malmarjeh/t5-arabic-text-summarization")

def summarize_text(text, language, min_length, max_length):
    if not text.strip():
        return "Please enter text." if language == "English" else "الرجاء إدخال نص."

    detected_language, _ = langid.classify(text)

    if detected_language == "en":
        summary = summarizer_en(
            text, 
            max_length=int(max_length), 
            min_length=int(min_length), 
            do_sample=False, 
            no_repeat_ngram_size=2
        )[0]['summary_text']
    elif detected_language == "ar":
        summary = summarizer_ar(
            text, 
            max_length=int(max_length), 
            min_length=int(min_length), 
            do_sample=False, 
            no_repeat_ngram_size=2
        )[0]['summary_text']
    else:
        return "Unsupported language."

    return summary

def translate_ui(language):
    return {
        "title": "👋 مرحبًا بك في أداة تلخيص النصوص!" if language == "العربية" else "👋 Welcome to the Text Summarization Tool!",
        "summarize_btn": " لخص النص" if language == "العربية" else " Summarize Text",
        "text_input_label": "أدخل النص" if language == "العربية" else "Enter text",
        "text_output_label": "النتيجة" if language == "العربية" else "Result",
        "min_length_label": "الحد الأدنى للطول" if language == "العربية" else "Minimum Length",
        "max_length_label": "الحد الأقصى للطول" if language == "العربية" else "Maximum Length"
    }

def update_ui(language):
    texts = translate_ui(language)
    return (
        texts["title"], 
        texts["summarize_btn"], 
        texts["text_input_label"], 
        texts["text_output_label"], 
        texts["min_length_label"], 
        texts["max_length_label"]
    )

with gr.Blocks() as demo:
    lang_toggle = gr.Radio(
        ["العربية", "English"], 
        label="🌍 اختر لغة الواجهة", 
        value="العربية", 
        elem_id="language-toggle"
    )
    title = gr.Markdown(
        "## 👋 مرحبًا بك في أداة تلخيص النصوص", 
        elem_id="title"
    )

    with gr.Row():
    
        with gr.Column():
            text_input_label = gr.Markdown(
                "أدخل النص", 
                elem_id="text-input-label"
            )
            text_input = gr.Textbox(
                label="", 
                elem_id="text-input"
            )

            min_length_label = gr.Markdown(
                "الحد الأدنى للطول", 
                elem_id="min-length-label"
            )
            min_length = gr.Slider(
                minimum=10, 
                maximum=50, 
                value=10, 
                step=1, 
                label="", 
                elem_id="min-length-slider"
            )

            max_length_label = gr.Markdown(
                "الحد الأقصى للطول", 
                elem_id="max-length-label"
            )
            max_length = gr.Slider(
                minimum=50, 
                maximum=150, 
                value=100, 
                step=1, 
                label="", 
                elem_id="max-length-slider"
            )

            summarize_btn = gr.Button(
                "لخص النص", 
                elem_id="summarize-btn", variant="primary"
            )
        
        with gr.Column():
            text_output_label = gr.Markdown(
                "النتيجة", 
                elem_id="text-output-label"
            )
            text_output = gr.Textbox(
                label="", 
                elem_id="text-output"
            )

    lang_toggle.change(
        fn=lambda lang: update_ui(lang), 
        inputs=lang_toggle,
        outputs=[
            title, 
            summarize_btn, 
            text_input_label, 
            text_output_label, 
            min_length_label, 
            max_length_label
        ]
    )

    summarize_btn.click(
        fn=summarize_text, 
        inputs=[text_input, lang_toggle, min_length, max_length], 
        outputs=text_output
    )

demo.launch()