import gradio as gr from transformers import pipeline, AutoModelForTokenClassification, AutoTokenizer # Define the model name MODEL_NAME = "impresso-project/ner-stacked-bert-multilingual" # Load the tokenizer and model using the pipeline ner_tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) ner_pipeline = pipeline( "generic-ner", model=MODEL_NAME, tokenizer=ner_tokenizer, trust_remote_code=True, device="cpu", ) # Helper function to print entities nicely def print_nicely(entities): entity_details = [] for entity in entities: entity_info = f"Entity: {entity['entity']} | Confidence: {entity['score']:.2f}% | Text: {entity['word'].strip()} | Start: {entity['start']} | End: {entity['end']}" entity_details.append(entity_info) return "\n".join(entity_details) # Helper function to flatten entities and prepare them for HighlightedText def prepare_entities_for_highlight(text, results): entities = [] for category, entity_list in results.items(): for entity in entity_list: # Appending each entity's word, start and end for highlighting, including the entity label and score entities.append( ( entity["start"], entity["end"], f"{entity['entity']} ({entity['score']:.2f}%)", ) ) return {"text": text, "entities": entities} # Function to process the sentence and extract entities def extract_entities(sentence): results = ner_pipeline(sentence) entity_results = [] # Extract and format the entities for key in results.keys(): entity_results.append(print_nicely(results[key])) print(results) print(entity_results) return prepare_entities_for_highlight(sentence, results) # Create Gradio interface def ner_app_interface(): input_sentence = gr.Textbox( lines=5, label="Input Sentence", placeholder="Enter a sentence for NER..." ) output_entities = gr.HighlightedText(label="Extracted Entities") # Interface definition interface = gr.Interface( fn=extract_entities, inputs=input_sentence, outputs=output_entities, title="Named Entity Recognition", description="Enter a sentence to extract named entities using the NER model from the Impresso project.", ) interface.launch() # Run the app if __name__ == "__main__": ner_app_interface()