import gradio as gr from transformers import pipeline from deep_translator import GoogleTranslator from langdetect import detect import os # ========================================================= # LOAD MODEL ONCE # ========================================================= summarizer = pipeline( "summarization", model="karim91/Multilingual_Text_Summarization_System-BART_v1.0.9", ) # ========================================================= # SUPPORTED LANGUAGES AND LENGTH # ========================================================= SUPPORTED_LANGUAGES = { "Français": "fr", "English": "en", "Arabic": "ar", "Spanish": "es", "German": "de", } LENGTH_MAP = { "Short ": (60, 100), "Medium ": (120, 180), "Long ": (220, 300), } # ========================================================= # CORE FUNCTION # ========================================================= def summarize_text_multilingual(text, file, output_lang, length_choice): # Read text from uploaded file if provided if file is not None: with open(file.name, "r", encoding="utf-8", errors="ignore") as f: text = f.read() if text is None or len(text.strip()) < 50: return "❌ Please provide at least 50 characters of text." min_len, max_len = LENGTH_MAP[length_choice] # Detect input language source_lang = detect(text) # Translate input to English if not English text_en = text if source_lang != "en": try: text_en = GoogleTranslator(source=source_lang, target="en").translate(text) except Exception as e: return f"❌ Error translating input to English: {e}" # Summarize in English try: summary_en = summarizer( text_en, min_length=min_len, max_length=max_len, do_sample=False, )[0]["summary_text"] except Exception as e: return f"❌ Error during summarization: {e}" # Translate summary to target language if needed target_code = SUPPORTED_LANGUAGES.get(output_lang, "en") summary = summary_en if target_code != "en": try: summary = GoogleTranslator(source="en", target=target_code).translate(summary_en) except Exception as e: return f"❌ Error translating summary: {e}" return summary # ========================================================= # GRADIO UI # ========================================================= with gr.Blocks( title="Multilingual Text Summarization", theme=gr.themes.Soft(), ) as demo: gr.Markdown(""" # 📝 Multilingual Text Summarization ### 🌍 100+ languages | 📊 Demo Hugging Face Spaces """) with gr.Row(): with gr.Column(scale=2): text_input = gr.Textbox( label="📝 Texte à résumer", placeholder="Collez votre texte ici (minimum 50 caractères)...", lines=10, ) file_input = gr.File( label="📁 Ou importez un fichier texte", file_types=[".txt", ".md"], ) with gr.Column(scale=1): output_lang = gr.Dropdown( choices=list(SUPPORTED_LANGUAGES.keys()), value="Français", label="🌍 Langue de sortie", ) length_choice = gr.Radio( choices=list(LENGTH_MAP.keys()), value="Moyen (≈150 mots)", label="📏 Longueur du résumé", ) submit_btn = gr.Button("🚀 Générer le résumé", variant="primary") output = gr.Textbox( label="✨ Résumé généré", lines=8, ) submit_btn.click( fn=summarize_text_multilingual, inputs=[text_input, file_input, output_lang, length_choice], outputs=output, ) # ========================================================= # LAUNCH # ========================================================= demo.launch()