Spaces:
Sleeping
Sleeping
Penny Wang commited on
Commit ·
51ab6ab
1
Parent(s): 183b447
Final API implementation for 6 UN languages
Browse files- app.py +28 -62
- requirements.txt +1 -4
app.py
CHANGED
|
@@ -1,49 +1,19 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
-
from
|
| 3 |
|
| 4 |
-
# Dictionary mapping language names to their ISO 639-1 codes
|
| 5 |
-
#
|
| 6 |
LANGUAGE_MAP = {
|
|
|
|
|
|
|
| 7 |
"English": "en",
|
| 8 |
"French": "fr",
|
| 9 |
-
"Spanish": "es",
|
| 10 |
"Russian": "ru",
|
| 11 |
-
"
|
| 12 |
-
"Arabic": "ar"
|
| 13 |
}
|
| 14 |
LANGUAGE_OPTIONS = list(LANGUAGE_MAP.keys())
|
| 15 |
-
MODEL_CACHE = {}
|
| 16 |
-
|
| 17 |
-
def get_translator_pipeline(src_lang_code, tgt_lang_code):
|
| 18 |
-
"""
|
| 19 |
-
Loads or retrieves the correct Helsinki-NLP model based on the source and target codes.
|
| 20 |
-
It handles two main cases:
|
| 21 |
-
1. src_lang is English (e.g., en-fr, en-ru)
|
| 22 |
-
2. tgt_lang is English (e.g., fr-en, ru-en)
|
| 23 |
-
"""
|
| 24 |
-
# Case 1: English as source language
|
| 25 |
-
if src_lang_code == 'en':
|
| 26 |
-
model_name = f"Helsinki-NLP/opus-mt-en-{tgt_lang_code}"
|
| 27 |
-
# Case 2: English as target language
|
| 28 |
-
elif tgt_lang_code == 'en':
|
| 29 |
-
model_name = f"Helsinki-NLP/opus-mt-{src_lang_code}-en"
|
| 30 |
-
# Case 3: Direct translation between two non-English languages
|
| 31 |
-
else:
|
| 32 |
-
return None, "Error: Direct translation between two non-English languages is not supported in this simplified app. Please use English as either the Source or Target language."
|
| 33 |
-
|
| 34 |
-
if model_name not in MODEL_CACHE:
|
| 35 |
-
print(f"Loading new model: {model_name}")
|
| 36 |
-
try:
|
| 37 |
-
MODEL_CACHE[model_name] = pipeline("translation", model=model_name)
|
| 38 |
-
except Exception as e:
|
| 39 |
-
return None, f"Error loading model {model_name}: {e}"
|
| 40 |
-
|
| 41 |
-
return MODEL_CACHE[model_name], None
|
| 42 |
|
| 43 |
def translate_text(input_text, src_lang_name, tgt_lang_name):
|
| 44 |
-
"""
|
| 45 |
-
Takes text and language names, determines the model, and performs translation.
|
| 46 |
-
"""
|
| 47 |
if not input_text:
|
| 48 |
return "", "Please enter text to translate."
|
| 49 |
|
|
@@ -56,18 +26,13 @@ def translate_text(input_text, src_lang_name, tgt_lang_name):
|
|
| 56 |
if not src_code or not tgt_code:
|
| 57 |
return "", "Invalid language selection."
|
| 58 |
|
| 59 |
-
translator, error = get_translator_pipeline(src_code, tgt_code)
|
| 60 |
-
|
| 61 |
-
if error:
|
| 62 |
-
return "", error
|
| 63 |
-
if not translator:
|
| 64 |
-
return "", "Translation service unavailable."
|
| 65 |
-
|
| 66 |
try:
|
| 67 |
-
|
| 68 |
-
|
|
|
|
|
|
|
| 69 |
return translated_text, "Translation successful."
|
| 70 |
-
|
| 71 |
except Exception as e:
|
| 72 |
return "", f"Translation failed during execution: {e}"
|
| 73 |
|
|
@@ -76,10 +41,9 @@ with gr.Blocks(title="UN Official Language Translator", theme=gr.themes.Soft())
|
|
| 76 |
gr.Markdown(
|
| 77 |
"""
|
| 78 |
# 🌐 UN Official Language Translator
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
Please select your source and target languages below.
|
| 83 |
"""
|
| 84 |
)
|
| 85 |
|
|
@@ -87,32 +51,34 @@ with gr.Blocks(title="UN Official Language Translator", theme=gr.themes.Soft())
|
|
| 87 |
source_lang = gr.Dropdown(
|
| 88 |
label="Source Language",
|
| 89 |
choices=LANGUAGE_OPTIONS,
|
| 90 |
-
value="English"
|
|
|
|
| 91 |
)
|
| 92 |
target_lang = gr.Dropdown(
|
| 93 |
label="Target Language",
|
| 94 |
choices=LANGUAGE_OPTIONS,
|
| 95 |
-
value="French"
|
|
|
|
| 96 |
)
|
| 97 |
|
| 98 |
input_text = gr.Textbox(
|
| 99 |
-
label="Input Text",
|
| 100 |
-
placeholder="Enter the text you want to translate...",
|
| 101 |
lines=4
|
| 102 |
)
|
| 103 |
-
|
| 104 |
translate_button = gr.Button("Translate", variant="primary")
|
| 105 |
-
|
| 106 |
output_text = gr.Textbox(
|
| 107 |
-
label="Translated Output",
|
| 108 |
-
interactive=False,
|
| 109 |
lines=4
|
| 110 |
)
|
| 111 |
-
|
| 112 |
status_message = gr.Textbox(label="Status", interactive=False, value="Ready to translate.")
|
| 113 |
-
|
| 114 |
translate_button.click(
|
| 115 |
-
fn=translate_text,
|
| 116 |
-
inputs=[input_text, source_lang, target_lang],
|
| 117 |
outputs=[output_text, status_message]
|
| 118 |
)
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
+
from deep_translator import GoogleTranslator
|
| 3 |
|
| 4 |
+
# Dictionary mapping language names to their ISO 639-1 codes
|
| 5 |
+
# GoogleTranslator uses standard codes, including simplified Chinese (zh-CN)
|
| 6 |
LANGUAGE_MAP = {
|
| 7 |
+
"Arabic": "ar",
|
| 8 |
+
"Chinese (Simplified)": "zh-CN",
|
| 9 |
"English": "en",
|
| 10 |
"French": "fr",
|
|
|
|
| 11 |
"Russian": "ru",
|
| 12 |
+
"Spanish": "es"
|
|
|
|
| 13 |
}
|
| 14 |
LANGUAGE_OPTIONS = list(LANGUAGE_MAP.keys())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
def translate_text(input_text, src_lang_name, tgt_lang_name):
|
|
|
|
|
|
|
|
|
|
| 17 |
if not input_text:
|
| 18 |
return "", "Please enter text to translate."
|
| 19 |
|
|
|
|
| 26 |
if not src_code or not tgt_code:
|
| 27 |
return "", "Invalid language selection."
|
| 28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
try:
|
| 30 |
+
translator = GoogleTranslator(source=src_code, target=tgt_code)
|
| 31 |
+
|
| 32 |
+
translated_text = translator.translate(input_text)
|
| 33 |
+
|
| 34 |
return translated_text, "Translation successful."
|
| 35 |
+
|
| 36 |
except Exception as e:
|
| 37 |
return "", f"Translation failed during execution: {e}"
|
| 38 |
|
|
|
|
| 41 |
gr.Markdown(
|
| 42 |
"""
|
| 43 |
# 🌐 UN Official Language Translator
|
| 44 |
+
|
| 45 |
+
This app supports translation between the six official languages of the UN:
|
| 46 |
+
**Arabic, Chinese, English, French, Russian, and Spanish**.
|
|
|
|
| 47 |
"""
|
| 48 |
)
|
| 49 |
|
|
|
|
| 51 |
source_lang = gr.Dropdown(
|
| 52 |
label="Source Language",
|
| 53 |
choices=LANGUAGE_OPTIONS,
|
| 54 |
+
value="English",
|
| 55 |
+
scale=1
|
| 56 |
)
|
| 57 |
target_lang = gr.Dropdown(
|
| 58 |
label="Target Language",
|
| 59 |
choices=LANGUAGE_OPTIONS,
|
| 60 |
+
value="French",
|
| 61 |
+
scale=1
|
| 62 |
)
|
| 63 |
|
| 64 |
input_text = gr.Textbox(
|
| 65 |
+
label="Input Text",
|
| 66 |
+
placeholder="Enter the text you want to translate...",
|
| 67 |
lines=4
|
| 68 |
)
|
| 69 |
+
|
| 70 |
translate_button = gr.Button("Translate", variant="primary")
|
| 71 |
+
|
| 72 |
output_text = gr.Textbox(
|
| 73 |
+
label="Translated Output",
|
| 74 |
+
interactive=False,
|
| 75 |
lines=4
|
| 76 |
)
|
| 77 |
+
|
| 78 |
status_message = gr.Textbox(label="Status", interactive=False, value="Ready to translate.")
|
| 79 |
+
|
| 80 |
translate_button.click(
|
| 81 |
+
fn=translate_text,
|
| 82 |
+
inputs=[input_text, source_lang, target_lang],
|
| 83 |
outputs=[output_text, status_message]
|
| 84 |
)
|
requirements.txt
CHANGED
|
@@ -1,5 +1,2 @@
|
|
| 1 |
gradio
|
| 2 |
-
|
| 3 |
-
torch
|
| 4 |
-
sentencepiece
|
| 5 |
-
accelerate
|
|
|
|
| 1 |
gradio
|
| 2 |
+
deep-translator
|
|
|
|
|
|
|
|
|