lijiacai mrfakename commited on
Commit
43d7d48
Β·
0 Parent(s):

Duplicate from mrfakename/Translate

Browse files

Co-authored-by: mrfakename <mrfakename@users.noreply.huggingface.co>

Files changed (5) hide show
  1. .gitattributes +31 -0
  2. README.md +38 -0
  3. available_models.py +48 -0
  4. main.py +71 -0
  5. requirements.txt +6 -0
.gitattributes ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ftz filter=lfs diff=lfs merge=lfs -text
6
+ *.gz filter=lfs diff=lfs merge=lfs -text
7
+ *.h5 filter=lfs diff=lfs merge=lfs -text
8
+ *.joblib filter=lfs diff=lfs merge=lfs -text
9
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
10
+ *.model filter=lfs diff=lfs merge=lfs -text
11
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
12
+ *.npy filter=lfs diff=lfs merge=lfs -text
13
+ *.npz filter=lfs diff=lfs merge=lfs -text
14
+ *.onnx filter=lfs diff=lfs merge=lfs -text
15
+ *.ot filter=lfs diff=lfs merge=lfs -text
16
+ *.parquet filter=lfs diff=lfs merge=lfs -text
17
+ *.pickle filter=lfs diff=lfs merge=lfs -text
18
+ *.pkl filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pt filter=lfs diff=lfs merge=lfs -text
21
+ *.pth filter=lfs diff=lfs merge=lfs -text
22
+ *.rar filter=lfs diff=lfs merge=lfs -text
23
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
24
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
25
+ *.tflite filter=lfs diff=lfs merge=lfs -text
26
+ *.tgz filter=lfs diff=lfs merge=lfs -text
27
+ *.wasm filter=lfs diff=lfs merge=lfs -text
28
+ *.xz filter=lfs diff=lfs merge=lfs -text
29
+ *.zip filter=lfs diff=lfs merge=lfs -text
30
+ *.zst filter=lfs diff=lfs merge=lfs -text
31
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Translator
3
+ emoji: πŸ—£οΈ
4
+ colorFrom: blue
5
+ colorTo: pink
6
+ sdk: streamlit
7
+ app_file: main.py
8
+ pinned: false
9
+ duplicated_from: mrfakename/Translate
10
+ ---
11
+
12
+ # Configuration
13
+
14
+ `title`: _string_
15
+ Display title for the Space
16
+
17
+ `emoji`: _string_
18
+ Space emoji (emoji-only character allowed)
19
+
20
+ `colorFrom`: _string_
21
+ Color for Thumbnail gradient (red, yellow, green, blue, indigo, purple, pink, gray)
22
+
23
+ `colorTo`: _string_
24
+ Color for Thumbnail gradient (red, yellow, green, blue, indigo, purple, pink, gray)
25
+
26
+ `sdk`: _string_
27
+ Can be either `gradio`, `streamlit`, or `static`
28
+
29
+ `sdk_version` : _string_
30
+ Only applicable for `streamlit` SDK.
31
+ See [doc](https://hf.co/docs/hub/spaces) for more info on supported versions.
32
+
33
+ `app_file`: _string_
34
+ Path to your main application file (which contains either `gradio` or `streamlit` Python code, or `static` html code).
35
+ Path is relative to the root of the repository.
36
+
37
+ `pinned`: _boolean_
38
+ Whether the Space stays on top of your list.
available_models.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ πŸ—£οΈ Translator - Translate text from one language to another.
3
+
4
+ MODELS list all available models.
5
+
6
+ Author:
7
+ - @ChainYo
8
+ """
9
+
10
+ MODELS = {
11
+ "πŸ‡ΊπŸ‡Έ English->πŸ‡ΊπŸ‡Έ English": [0,],
12
+ "πŸ‡ΊπŸ‡Έ English->πŸ‡«πŸ‡· French": ["Helsinki-NLP/opus-mt-en-fr", "https://huggingface.co/Helsinki-NLP/opus-mt-en-fr"],
13
+ "πŸ‡ΊπŸ‡Έ English->πŸ‡©πŸ‡ͺ German": ["Helsinki-NLP/opus-mt-en-de", "https://huggingface.co/Helsinki-NLP/opus-mt-en-de"],
14
+ "πŸ‡ΊπŸ‡Έ English->πŸ‡ͺπŸ‡Έ Spanish": ["Helsinki-NLP/opus-mt-en-es", "https://huggingface.co/Helsinki-NLP/opus-mt-en-es"],
15
+ "πŸ‡ΊπŸ‡Έ English->πŸ‡·πŸ‡Ί Russian": ["Helsinki-NLP/opus-mt-en-ru", "https://huggingface.co/Helsinki-NLP/opus-mt-en-ru"],
16
+ "πŸ‡ΊπŸ‡Έ English->πŸ‡¨πŸ‡³ Chinese": ["Helsinki-NLP/opus-mt-en-zh", "https://huggingface.co/Helsinki-NLP/opus-mt-en-zh"],
17
+ "πŸ‡«πŸ‡· French->πŸ‡«πŸ‡· French": [0, None],
18
+ "πŸ‡«πŸ‡· French->πŸ‡ΊπŸ‡Έ English": ["Helsinki-NLP/opus-mt-fr-en", "https://huggingface.co/Helsinki-NLP/opus-mt-fr-en"],
19
+ "πŸ‡«πŸ‡· French->πŸ‡©πŸ‡ͺ German": ["Helsinki-NLP/opus-mt-fr-de", "https://huggingface.co/Helsinki-NLP/opus-mt-fr-de"],
20
+ "πŸ‡«πŸ‡· French->πŸ‡ͺπŸ‡Έ Spanish": ["Helsinki-NLP/opus-mt-fr-es", "https://huggingface.co/Helsinki-NLP/opus-mt-fr-es"],
21
+ "πŸ‡«πŸ‡· French->πŸ‡·πŸ‡Ί Russian": ["Helsinki-NLP/opus-mt-fr-ru", "https://huggingface.co/Helsinki-NLP/opus-mt-fr-ru"],
22
+ "πŸ‡«πŸ‡· French->πŸ‡¨πŸ‡³ Chinese": [None, None],
23
+ "πŸ‡ͺπŸ‡Έ Spanish->πŸ‡ͺπŸ‡Έ Spanish": [0, None],
24
+ "πŸ‡ͺπŸ‡Έ Spanish->πŸ‡ΊπŸ‡Έ English": ["Helsinki-NLP/opus-mt-es-en", "https://huggingface.co/Helsinki-NLP/opus-mt-es-en"],
25
+ "πŸ‡ͺπŸ‡Έ Spanish->πŸ‡©πŸ‡ͺ German": ["Helsinki-NLP/opus-mt-es-de", "https://huggingface.co/Helsinki-NLP/opus-mt-es-de"],
26
+ "πŸ‡ͺπŸ‡Έ Spanish->πŸ‡«πŸ‡· French": ["Helsinki-NLP/opus-mt-es-fr", "https://huggingface.co/Helsinki-NLP/opus-mt-es-fr"],
27
+ "πŸ‡ͺπŸ‡Έ Spanish->πŸ‡·πŸ‡Ί Russian": ["Helsinki-NLP/opus-mt-es-ru", "https://huggingface.co/Helsinki-NLP/opus-mt-es-ru"],
28
+ "πŸ‡ͺπŸ‡Έ Spanish->πŸ‡¨πŸ‡³ Chinese": ["Helsinki-NLP/opus-tatoeba-es-zh", "https://huggingface.co/Helsinki-NLP/opus-tatoeba-es-zh"],
29
+ "πŸ‡©πŸ‡ͺ German->πŸ‡©πŸ‡ͺ German": [0, None],
30
+ "πŸ‡©πŸ‡ͺ German->πŸ‡ΊπŸ‡Έ English": ["Helsinki-NLP/opus-mt-de-en", "https://huggingface.co/Helsinki-NLP/opus-mt-de-en"],
31
+ "πŸ‡©πŸ‡ͺ German->πŸ‡ͺπŸ‡Έ Spanish": ["Helsinki-NLP/opus-mt-de-es", "https://huggingface.co/Helsinki-NLP/opus-mt-de-es"],
32
+ "πŸ‡©πŸ‡ͺ German->πŸ‡«πŸ‡· French": ["Helsinki-NLP/opus-mt-de-fr", "https://huggingface.co/Helsinki-NLP/opus-mt-de-fr"],
33
+ "πŸ‡©πŸ‡ͺ German->πŸ‡·πŸ‡Ί Russian": [None, None],
34
+ "πŸ‡©πŸ‡ͺ German->πŸ‡¨πŸ‡³ Chinese": ["Helsinki-NLP/opus-mt-de-ZH", "https://huggingface.co/Helsinki-NLP/opus-mt-de-ZH"],
35
+ "πŸ‡·πŸ‡Ί Russian->πŸ‡·πŸ‡Ί Russian": [0, None],
36
+ "πŸ‡·πŸ‡Ί Russian->πŸ‡ΊπŸ‡Έ English": ["Helsinki-NLP/opus-mt-ru-en", "https://huggingface.co/Helsinki-NLP/opus-mt-ru-en"],
37
+ "πŸ‡·πŸ‡Ί Russian->πŸ‡ͺπŸ‡Έ Spanish": ["Helsinki-NLP/opus-mt-ru-es", "https://huggingface.co/Helsinki-NLP/opus-mt-ru-es"],
38
+ "πŸ‡·πŸ‡Ί Russian->πŸ‡«πŸ‡· French": ["Helsinki-NLP/opus-mt-ru-fr", "https://huggingface.co/Helsinki-NLP/opus-mt-ru-fr"],
39
+ "πŸ‡·πŸ‡Ί Russian->πŸ‡©πŸ‡ͺ German": [None, None],
40
+
41
+
42
+
43
+ "πŸ‡¨πŸ‡³ Chinese->πŸ‡ΊπŸ‡Έ English": ["Helsinki-NLP/opus-mt-zh-en", "https://huggingface.co/Helsinki-NLP/opus-mt-zh-en"],
44
+ "πŸ‡¨πŸ‡³ Chinese->πŸ‡ͺπŸ‡Έ Spanish": [None, None],
45
+ "πŸ‡¨πŸ‡³ Chinese->πŸ‡«πŸ‡· French": [None, None],
46
+ "πŸ‡¨πŸ‡³ Chinese->πŸ‡¨πŸ‡³ Chinese": [0, None],
47
+ "πŸ‡¨πŸ‡³ Chinese->πŸ‡©πŸ‡ͺ German": [None, None],
48
+ }
main.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ πŸ—£οΈ Translator - Translate text from one language to another.
3
+
4
+ Application file made with Streamlit.
5
+ """
6
+
7
+ import re
8
+ import streamlit as st
9
+
10
+ from datetime import datetime
11
+ from transformers import pipeline
12
+ from available_models import MODELS
13
+
14
+
15
+ st.set_page_config(page_title="Translate", page_icon="πŸ—£οΈ")
16
+ st.title("Translate", "main")
17
+ st.subheader("Using cutting-edge AI/ML technology to translate text for you.")
18
+ st.markdown("""
19
+ Welcome to Translate. Here, we harness the power of cutting-edge Artificial Intelligence and Machine Learning to translate text for _you_.
20
+
21
+ Translate is a free tool to translate quickly and easily! Start today by typing your text into the form below and selecting a language pair!
22
+ """)
23
+ hide_streamlit_style = """
24
+ <style>
25
+ #MainMenu {visibility: hidden;}
26
+ footer {visibility: hidden;}
27
+ </style>
28
+ """
29
+ st.markdown(hide_streamlit_style, unsafe_allow_html=True)
30
+ lang1, lang2 = st.columns(2)
31
+ lang1.selectbox(
32
+ "Source Language", ["πŸ‡ΊπŸ‡Έ English", "πŸ‡«πŸ‡· French", "πŸ‡©πŸ‡ͺ German", "πŸ‡ͺπŸ‡Έ Spanish", "πŸ‡¨πŸ‡³ Chinese"],
33
+ key="input_lang", index=0,
34
+ )
35
+ lang2.selectbox(
36
+ "Target Language", ["πŸ‡ΊπŸ‡Έ English", "πŸ‡«πŸ‡· French", "πŸ‡©πŸ‡ͺ German", "πŸ‡ͺπŸ‡Έ Spanish", "πŸ‡¨πŸ‡³ Chinese"],
37
+ key="output_lang", index=3,
38
+ )
39
+
40
+ selected_model = MODELS[f"{st.session_state['input_lang']}->{st.session_state['output_lang']}"]
41
+
42
+
43
+ if selected_model[0] == None:
44
+ st.write("Sorry, we can't translate this language pair! Please try a different one!")
45
+ elif selected_model[0] == 0:
46
+ st.write("Haha! We know what you're trying to do and you can't do it! You're not allowed to translate languages from one language to the same one!")
47
+ else:
48
+ input_text = st.text_area("Enter text to translate:", height=200, key="input")
49
+ translate_text = st.button("Translate")
50
+
51
+ if translate_text:
52
+ with st.spinner(text="Just a sec, it takes a minute to load up the AI/ML!"):
53
+ task = pipeline(
54
+ "translation",
55
+ model=selected_model[0],
56
+ tokenizer=selected_model[0],
57
+ )
58
+
59
+ progress_bar = st.progress(0)
60
+ with st.spinner(text="Just a little bit more time! We wish it was easy, but AI takes some time!"):
61
+ text_to_translate = re.split('(?<=[.!?]) +', input_text)
62
+ total_progress = len(text_to_translate)
63
+
64
+ for i, text in enumerate(text_to_translate):
65
+ translation = task(text)
66
+ text_to_translate[i] = translation[0]["translation_text"]
67
+ progress_bar.progress((i + 1) / total_progress)
68
+
69
+ st.success("Yay! It's done! Check out your translation below!")
70
+ st.write("**Here's your translation:**")
71
+ st.code(' '.join(text_to_translate))
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ streamlit==1.3.1
2
+ transformers==4.15.0
3
+ torch==1.10.1
4
+ torchaudio==0.10.1
5
+ torchvision==0.11.2
6
+ sentencepiece==0.1.96