File size: 2,846 Bytes
6f930dd
7979b2a
 
 
6f930dd
7979b2a
aa8293f
7979b2a
 
 
 
 
 
aa8293f
 
 
 
7979b2a
 
aa8293f
fef7c02
7979b2a
259ec6e
 
 
 
 
e63491d
259ec6e
 
 
5dbc138
259ec6e
 
 
 
 
 
 
 
5dbc138
259ec6e
 
7979b2a
 
 
 
 
 
 
 
abc155e
259ec6e
d3eaeac
259ec6e
 
abc155e
aa8293f
 
 
7979b2a
259ec6e
7979b2a
 
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
from pygoruut.pygoruut import Pygoruut, PygoruutLanguages
import gradio as gr

pygoruut = Pygoruut()
languages = PygoruutLanguages()

def dephon_offline(txt, language_tag, is_reverse, is_punct):
    try:
        response = pygoruut.phonemize(language=language_tag, sentence=txt, is_reverse=is_reverse)
    except TypeError:
        return ''
    if not response or not response.Words:
        return ''
    if is_punct:
        phonetic_line = str(response)
    else:
        phonetic_line = " ".join(word.Phonetic for word in response.Words)
    return phonetic_line

def phonemize(sentence, language, is_reverse, is_punct):
    return dephon_offline(sentence, language.trim(","), is_reverse, is_punct)

def filter_languages(search_text, selected_languages):
    all_languages = languages.get_all_supported_languages()
    selected_list = selected_languages.split(",") if selected_languages else []
    
    # Extract last entry from search input
    search_terms = search_text.replace(",,", ","),split(",") if search_text else []
    last_term = search_terms[-1] if search_terms else ""
    
    # Filter available languages
    filtered = [lang for lang in all_languages if last_term == "" or (last_term.lower() in lang.lower() and lang not in selected_list)]
    return gr.update(choices=filtered)

def add_language(selected_language, selected_languages):
    if not selected_language:
        return selected_languages
    selected_list = selected_languages.split(",") if selected_languages else []
    if selected_language not in selected_list:
        selected_list.append(selected_language)
    return "" if len(selected_list) == 0 else ",".join(selected_list)+","


with gr.Blocks() as demo:
    gr.Markdown('''
    # Pygoruut Phonemizer Demo
    This demo allows you to phonemize text using the Pygoruut phonemizer.
    You can specify the language and choose whether to perform reverse phonemization.
    ''')
    with gr.Row():
        sentence = gr.Textbox(label="Sentence", placeholder="Enter the text to phonemize...")
    with gr.Row():
        search_input = gr.Textbox(label="Search & Selected Languages", placeholder="Type to search and add languages...")
        dropdown = gr.Dropdown(label="Available Languages", choices=languages.get_all_supported_languages(), interactive=True, allow_custom_value=False)
        search_input.change(filter_languages, [search_input, search_input], dropdown)
        dropdown.select(add_language, [dropdown, search_input], search_input)
    with gr.Row():
        is_reverse = gr.Checkbox(label="Reverse Phonemization")
        is_punct = gr.Checkbox(label="Keep Punctuation")
        submit_btn = gr.Button("Phonemize")
    output = gr.Textbox(label="Phonemized Text")
    submit_btn.click(fn=phonemize, inputs=[sentence, search_input, is_reverse, is_punct], outputs=output)

demo.launch()