drewThomasson's picture
Update app.py
352611d verified
import gradio as gr
from bs4 import BeautifulSoup
# Function to parse HTML and create a dictionary
def parse_html_to_dict(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
html_content = file.read()
soup = BeautifulSoup(html_content, 'html.parser')
language_dict = {}
for p in soup.find_all('p')[1:]:
parts = p.get_text().split()
if len(parts) >= 2:
code = parts[0].strip()
name = " ".join(parts[1:]).strip()
language_dict[name] = code
return language_dict
# Load the languages from the HTML file
file_path = '1100_lan.htm' # Update this with your actual file path
language_dict = parse_html_to_dict(file_path)
languages = list(language_dict.keys())
# Function to filter languages based on search term
def filter_languages(search_term):
if not search_term:
return gr.update(choices=languages, value=None)
filtered = [lang for lang in languages if search_term.lower() in lang.lower()]
return gr.update(choices=filtered, value=None if not filtered else filtered[0])
# Function to display the language code
def get_language_code(selected_language):
return f"Language Code: {language_dict.get(selected_language, 'Unknown')}"
# Gradio interface
def create_searchable_dropdown():
with gr.Blocks() as demo:
with gr.Row():
search_input = gr.Textbox(
label="Search Language",
placeholder="Type to search...",
show_label=True
)
with gr.Row():
language_dropdown = gr.Dropdown(
choices=languages,
label="Select Language",
show_label=True,
interactive=True
)
with gr.Row():
language_code_output = gr.Textbox(
label="Language Code",
interactive=False
)
# Update dropdown choices when search input changes
search_input.change(
fn=filter_languages,
inputs=[search_input],
outputs=language_dropdown
)
# Display the language code when a language is selected
language_dropdown.change(
fn=get_language_code,
inputs=[language_dropdown],
outputs=language_code_output
)
return demo
# Create and launch the interface
if __name__ == "__main__":
demo = create_searchable_dropdown()
demo.launch()