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