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