Spaces:
Running
Running
| import gradio as gr | |
| from transformers import pipeline | |
| # Model names (keeping it programmatic) | |
| model_names = [ | |
| "cahya/NusaBert-ner-v1.3", | |
| "cahya/bert-base-indonesian-NER", | |
| ] | |
| example_sent = "Desember 1618, laksamana Inggris Thomas Dale mengusir Jan Pieterszoon Coen dari pelabuhan Jayakarta. Coen lari ke Maluku, saat itu pangkalan utama VOC. Kemudian Dale, dibantu Wijayakrama, mengepung benteng VOC." | |
| # Programmatically build the model info dict | |
| model_info = { | |
| model_name: { | |
| "link": f"https://huggingface.co/{model_name}", | |
| "usage": f"""from transformers import pipeline | |
| ner = pipeline("ner", model="{model_name}", grouped_entities=True) | |
| result = ner("{example_sent}") | |
| print(result)""", | |
| } | |
| for model_name in model_names | |
| } | |
| # Load models into a dictionary programmatically for the analyze function | |
| models = { | |
| model_name: pipeline("ner", model=model_name, grouped_entities=True) | |
| for model_name in model_names | |
| } | |
| # Function to display model info (link and usage code) | |
| def display_model_info(model_name): | |
| info = model_info[model_name] | |
| usage_code = info["usage"] | |
| link_button = f'[Open model page for {model_name} ]({info["link"]})' | |
| return usage_code, link_button | |
| # Function to run NER on input text | |
| def analyze_text(text, model_name): | |
| ner = models[model_name] | |
| ner_results = ner(text) | |
| highlighted_text = [] | |
| last_idx = 0 | |
| for entity in ner_results: | |
| start = entity["start"] | |
| end = entity["end"] | |
| label = entity["entity_group"] | |
| # Add non-entity text | |
| if start > last_idx: | |
| highlighted_text.append((text[last_idx:start], None)) | |
| # Add entity text | |
| highlighted_text.append((text[start:end], label)) | |
| last_idx = end | |
| # Add any remaining text after the last entity | |
| if last_idx < len(text): | |
| highlighted_text.append((text[last_idx:], None)) | |
| return highlighted_text | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Named Entity Recognition (NER) with NusaBERT") | |
| # Dropdown for model selection | |
| model_selector = gr.Dropdown( | |
| choices=list(model_info.keys()), | |
| value=list(model_info.keys())[0], | |
| label="Select Model", | |
| ) | |
| # Textbox for input text | |
| text_input = gr.Textbox( | |
| label="Enter Text", | |
| lines=5, | |
| value=example_sent, | |
| ) | |
| analyze_button = gr.Button("Run NER Model") | |
| output = gr.HighlightedText(label="NER Result", combine_adjacent=True) | |
| # Outputs: usage code, model page link, and analyze button | |
| code_output = gr.Code(label="Use this model", visible=True) | |
| link_output = gr.Markdown( | |
| f"[Open model page for {model_selector} ]({model_selector})" | |
| ) | |
| # Button for analyzing the input text | |
| analyze_button.click( | |
| analyze_text, inputs=[text_input, model_selector], outputs=output | |
| ) | |
| # Trigger the code output and model link when model is changed | |
| model_selector.change( | |
| display_model_info, inputs=[model_selector], outputs=[code_output, link_output] | |
| ) | |
| # Call the display_model_info function on load to set initial values | |
| demo.load( | |
| fn=display_model_info, | |
| inputs=[model_selector], | |
| outputs=[code_output, link_output], | |
| ) | |
| demo.launch() | |