import gradio as gr from transformers import pipeline from huggingface_hub import login import os # Initialize global pipeline ner_pipeline = None # Authenticate using the secret `HFTOKEN` def authenticate_with_token(): """Authenticate with the Hugging Face API using the HFTOKEN secret.""" hf_token = os.getenv("HFTOKEN") # Retrieve the token from environment variables if not hf_token: raise ValueError("HFTOKEN is not set. Please add it to the Secrets in your Space settings.") login(token=hf_token) def load_healthcare_ner_pipeline(): """Load the Hugging Face pipeline for Healthcare NER.""" global ner_pipeline if ner_pipeline is None: # Authenticate and initialize pipeline authenticate_with_token() ner_pipeline = pipeline( "token-classification", model="TypicaAI/HealthcareNER-Fr", aggregation_strategy="first" # Groups B- and I- tokens into entities ) return ner_pipeline def process_text(text): """Process input text and return highlighted entities.""" pipeline = load_healthcare_ner_pipeline() entities = pipeline(text) return {"text": text, "entities": entities} def log_demo_usage(text, num_entities): """Log demo usage for analytics.""" print(f"Processed text: {text[:50]}... | Entities found: {num_entities}") # Define the main demo interface demo = gr.Interface( fn=process_text, inputs=gr.Textbox( label="Paste French medical text", placeholder="Le patient présente une hypertension artérielle...", lines=5 ), outputs=gr.HighlightedText(label="Identified Medical Entities"), #outputs=gr.HTML(label="Identified Medical Entities"), title="French Healthcare NER Demo", description=""" _By **[Hicham Assoudi](https://huggingface.co/hassoudi)** – AI Researcher (Ph.D.), Oracle Consultant, and Author._ 🔗 [Follow me on LinkedIn](https://www.linkedin.com/in/assoudi) 🔬 **Try the French Healthcare NER model**, developed as part of the healthcare NLP case study from the book *[Natural Language Processing on Oracle Cloud Infrastructure: Building Transformer-Based NLP Solutions Using Oracle AI and Hugging Face](https://a.co/d/h0xL4lo). This Space demonstrates a Healthcare NER model developed through the step-by-step process detailed in 📖 Chapters 4 to 7 of the book. It covers healthcare dataset preparation and fine-tuning a transformer-based NER model, offering a practical example of how NLP can extract valuable insights from 🏥 French medical texts, such as identifying conditions, treatments, and more. """, article=""" ### **Disclaimer** This is a **demo model** provided for educational purposes. It was trained on a limited dataset and is not intended for production use, clinical decision-making, or real-world medical applications. """, examples=[ ["Le medecin donne des antibiotiques en cas d'infections des voies respiratoires e.g. pneumonie."], ["Dans le cas de l'asthme, le médecin peut recommander des corticoïdes pour réduire l'inflammation dans les poumons."], ["Pour soulager les symptômes d'allergie, le médecin prescrit des antihistaminiques."], ["Si le patient souffre de diabète de type 2, le médecin peut prescrire une insulinothérapie par exemple: Metformine 500mg."], ["Après une blessure musculaire ou une maladies douloureuses des tendons comme une tendinopathie, le patient pourrait suivre une kinésithérapie ou une physiothérapie."], ["En cas d'infection bactérienne, le médecin recommande une antibiothérapie."], ["Antécédents: infarctus du myocarde en 2019. Allergie à la pénicilline."] ] ) # Add marketing elements with gr.Blocks() as marketing_elements: gr.Markdown(""" ### 📖 Get the Complete Guide Learn how to build and deploy this exact model in 'Natural Language Processing on Oracle Cloud Infrastructure: Building Transformer-Based NLP Solutions Using Oracle AI and Hugging Face Kindle Edition' - ✓ Step-by-step implementation - ✓ Performance optimization - ✓ Enterprise deployment patterns - ✓ Complete source code [Get the Book](https://a.co/d/eg7my5G) """) with gr.Row(): email_input = gr.Textbox( label="Get the French Healthcare NER Dataset", placeholder="Enter your business email" ) submit_btn = gr.Button("Access Dataset") # Launch the Gradio demo if __name__ == "__main__": demo.launch()