|
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.strip(","), is_reverse, is_punct) |
|
|
|
def filter_languages(search_text, selected_languages): |
|
all_languages = languages.get_all_supported_languages() |
|
|
|
|
|
search_terms = search_text.replace(",,", ",").split(",") if search_text else [] |
|
last_term = search_terms[-1] if search_terms else "" |
|
|
|
|
|
filtered = [lang for lang in all_languages if last_term == "" or (last_term.lower() in lang.lower())] |
|
|
|
|
|
if not filtered: |
|
filtered = ["No match found..."] |
|
else: |
|
filtered = [filtered[0] + "..."] + filtered |
|
|
|
return gr.update(choices=filtered), filtered[0] |
|
|
|
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() |
|
|