File size: 4,498 Bytes
dc149ba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c5885d
 
158e38e
8c5885d
 
dc149ba
 
 
 
 
 
8c5885d
 
 
 
46abd0a
8c5885d
46abd0a
8c5885d
 
 
 
 
 
5e8469e
 
 
8c5885d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98b9978
31097f0
5e8469e
 
 
98b9978
 
 
 
 
 
 
 
5e8469e
98b9978
8c5885d
 
98b9978
dc149ba
 
 
 
 
 
 
 
 
 
 
 
592978b
dc149ba
 
2866119
dc149ba
 
 
 
 
 
2866119
dc149ba
 
2866119
dc149ba
b52f918
8112e48
f010b24
 
 
 
31097f0
592978b
 
 
 
 
 
9215493
dc149ba
 
cc4bac3
8c5885d
 
 
90e8b1d
 
 
 
5327323
aad89b6
8c5885d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
"""
translation program for simple text
1. detect language from langdetect
2. translate to target language given by user

Example from
https://www.thepythoncode.com/article/machine-translation-using-huggingface-transformers-in-python 

user_input:
    string: string to be translated
    target_lang: language to be translated to

Returns:
    string: translated string of text
"""
from __future__ import annotations
from typing import Iterable
import gradio as gr
from gradio.themes.base import Base
from gradio.themes.utils import colors, fonts, sizes
import argparse

import langid
from transformers import pipeline


class myTheme(Base):
    def __init__(
        self,
        *,
        primary_hue: colors.Color | str = colors.red,
        secondary_hue: colors.Color | str = colors.blue,
        neutral_hue: colors.Color | str = colors.orange,
        spacing_size: sizes.Size | str = sizes.spacing_md,
        radius_size: sizes.Size | str = sizes.radius_md,
        text_size: sizes.Size | str = sizes.text_lg,
        font: fonts.Font
        | str
        | Iterable[fonts.Font | str] = (
            fonts.GoogleFont("handjet"),
            "cursive",
            # "sans-serif",
        ),
        font_mono: fonts.Font
        | str
        | Iterable[fonts.Font | str] = (
            fonts.GoogleFont("IBM Plex Mono"),
            "ui-monospace",
            "monospace",
        ),
    ):
        super().__init__(
            primary_hue=primary_hue,
            secondary_hue=secondary_hue,
            neutral_hue=neutral_hue,
            spacing_size=spacing_size,
            radius_size=radius_size,
            text_size=text_size,
            font=font,
            font_mono=font_mono,
        )
        super().set(
            body_background_fill="repeating-linear-gradient(135deg, *primary_800, *primary_800 10px, *primary_900 10px, *primary_900 20px)",
            body_background_fill_dark="repeating-linear-gradient(135deg, *primary_800, *primary_800 10px, *primary_900 10px, *primary_900 20px)",
            button_primary_background_fill="linear-gradient(45deg, *primary_300, *secondary_400)",
            button_primary_background_fill_hover="linear-gradient(45deg, *primary_200, *secondary_300)",
            button_primary_text_color="white",
            button_primary_background_fill_dark="linear-gradient(90deg, *primary_600, *secondary_800)",
            slider_color="*secondary_300",
            slider_color_dark="*secondary_600",
            block_title_text_weight="600",
            block_border_width="3px",
            block_shadow="*shadow_drop_lg",
            button_shadow="*shadow_drop_lg",
            button_large_padding="24px",
        )


def detect_lang(article):
    """
    Language Detection using library langid

    Args:
        article (string): article that user wish to translate
        target_lang (string): language user want to translate article into

    Returns:
        string: detected language short form
    """

    result_lang = langid.classify(article)
    return result_lang[0]


def opus_trans(article, target_language):
    """
    Translation by Helsinki-NLP model

    Args:
        article (string): article that user wishes to translate
        result_lang (string): detected language in short form
        target_language (string): language that user wishes to translate article into

    Returns:
        string: translated piece of article based off target_language
    """
    result_lang = detect_lang(article)

    if target_language == "English":
        target_lang = "en"
    elif target_language == "Chinese":
        target_lang = "zh"

    if result_lang != target_lang:
        task_name = f"translation_{result_lang}_to_{target_lang}"
        model_name = f"Helsinki-NLP/opus-mt-{result_lang}-{target_lang}"
        translator = pipeline(task_name, model=model_name, tokenizer=model_name)
        translated = translator(article)[0]["translation_text"]
    else:
        translated = "Error: You chose the same language as the article detected language. Please reselect language and try again."
    return translated


myTheme = myTheme()

with gr.Blocks(theme=myTheme) as demo:
    article = gr.Textbox(label="Article")
    lang_select = gr.Radio(["English", "Chinese"], label="Select Desired Language")
    result = gr.Textbox(label="Translated Result")
    trans_btn = gr.Button("Translate")
    trans_btn.click(fn=opus_trans, inputs=[article, lang_select], outputs=result)

demo.launch()