test_ner_2 / app_backup.py
c-ho's picture
Rename app.py to app_backup.py
ed32f35 verified
import gradio as gr
from transformers import pipeline
# Model names (keeping it programmatic)
model_names = [
"c-ho/2026-04-24-crf-classweights-clean",
"c-ho/2026-04-23-crf-classweights-clean"
]
example_sent = (
"As a result, Indo-European developed a minimal vowel system combined with a very large consonant inventory including glottalized stops, also grammatical gender and adjectival agreement."
)
# -----------------------
# UI helpers
# -----------------------
# 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
}
def display_model_info(model_name):
info = model_info[model_name]
usage_code = info["usage"]
link = f"[Open model page]({info['link']})"
return usage_code, link
model_cache = {}
def get_model(model_name):
if model_name not in model_cache:
model_cache[model_name] = pipeline(
"ner",
model=model_name,
aggregation_strategy="simple" # safer for display
)
return model_cache[model_name]
# -----------------------
# NER function (SAFE OUTPUT)
# -----------------------
'''
# 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
'''
def analyze_text(text, model_name):
ner = get_model(model_name)
results = ner(text)
# Convert to safe string output (avoids HighlightedText SSR issues)
if not results:
return "No entities found."
lines = []
for ent in results:
word = ent.get("word", "")
label = ent.get("entity_group", ent.get("entity", "UNK"))
score = ent.get("score", 0.0)
lines.append(f"{word} -> {label} ({score:.2f})")
return "\n".join(lines)
# -----------------------
# UI
# -----------------------
with gr.Blocks() as demo:
gr.Markdown("# Named Entity Recognition (NER) Demo")
model_selector = gr.Dropdown(
choices=model_names,
value=model_names[0],
label="Select Model"
)
text_input = gr.Textbox(
label="Input Text",
lines=5,
value=example_sent
)
btn = gr.Button("Run NER")
output = gr.Textbox(label="Entities")
code_output = gr.Code(label="Usage Example")
link_output = gr.Markdown()
btn.click(
analyze_text,
inputs=[text_input, model_selector],
outputs=output
)
model_selector.change(
display_model_info,
inputs=model_selector,
outputs=[code_output, link_output]
)
# Initialize UI on load
demo.load(
display_model_info,
inputs=model_selector,
outputs=[code_output, link_output]
)
#def greet(name):
# return "Hello " + name + "!!"
#demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()