File size: 3,195 Bytes
6f930dd
7979b2a
 
21f92ac
209cd5c
a18de3f
7979b2a
6f930dd
7979b2a
aa8293f
7979b2a
 
 
 
 
 
aa8293f
 
 
 
7979b2a
 
aa8293f
3afa37a
7979b2a
259ec6e
 
 
 
29065b6
259ec6e
 
 
21ee637
97b742e
 
 
1b0f479
c094018
1492028
97b742e
1b0f479
259ec6e
 
 
 
ded4165
800fea9
 
259ec6e
 
800fea9
259ec6e
 
7979b2a
 
 
 
 
 
 
 
abc155e
259ec6e
d3eaeac
1b0f479
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
67
68
69
70
71
72
73
74
75
76
from pygoruut.pygoruut import Pygoruut, PygoruutLanguages
import gradio as gr

# comment change to bump the version bump it bump bump bump
# bump

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.strip(","), is_reverse, is_punct)

def filter_languages(search_text, selected_languages):
    all_languages = languages.get_all_supported_languages()
    
    # 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())]
    
    # If no results, show a message instead
    if not filtered:
        filtered = ["No match found..."]
    else:
        filtered = [filtered[0] + "..."] + filtered
    
    return gr.update(choices=filtered), filtered[0]  # Keep dropdown open and selectable

def add_language(selected_language, selected_languages):
    if not selected_language:
        return selected_languages
    selected_language = selected_language.rstrip("...")
    selected_list = selected_languages.split(",") if selected_languages else []
    selected_list = list(set(selected_list) & set(languages.get_all_supported_languages()))
    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])
        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()