Penny Wang commited on
Commit
51ab6ab
·
1 Parent(s): 183b447

Final API implementation for 6 UN languages

Browse files
Files changed (2) hide show
  1. app.py +28 -62
  2. requirements.txt +1 -4
app.py CHANGED
@@ -1,49 +1,19 @@
1
  import gradio as gr
2
- from transformers import pipeline
3
 
4
- # Dictionary mapping language names to their ISO 639-1 codes and corresponding Helsinki-NLP model tags.
5
- # Note: English (en) is the pivot language for the Helsinki-NLP Opus models.
6
  LANGUAGE_MAP = {
 
 
7
  "English": "en",
8
  "French": "fr",
9
- "Spanish": "es",
10
  "Russian": "ru",
11
- "Chinese (Simplified)": "zh",
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
- result = translator(input_text, max_length=512)
68
- translated_text = result[0]['translation_text']
 
 
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
- This app supports translation between the six official languages of the UN:
80
- ** Arabic, Chinese, English, French, Russian, and Spanish**.
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
- transformers
3
- torch
4
- sentencepiece
5
- accelerate
 
1
  gradio
2
+ deep-translator