File size: 3,018 Bytes
6f930dd
7979b2a
 
 
6f930dd
7979b2a
aa8293f
7979b2a
 
 
 
 
 
aa8293f
 
 
 
7979b2a
 
aa8293f
fef7c02
7979b2a
259ec6e
 
 
 
 
29065b6
259ec6e
 
 
5dbc138
d706d17
 
259ec6e
 
 
 
be9ab70
259ec6e
 
7bbe4da
259ec6e
 
7979b2a
 
 
 
 
 
 
 
abc155e
259ec6e
d3eaeac
1180fa7
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
66
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)]
    selected_value = filtered[0] if filtered and len(filtered) > 0 else "No languages found..."
    return gr.update(choices=filtered), selected_value + "..."

def add_language(selected_language, selected_languages):
    if not selected_language:
        return selected_languages
    selected_list = selected_languages.replace(",,", ",").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)+",").replace(",,", ",")


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])
        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()