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