AhmadDarif's picture
Update app.py
ba9bfbc verified
raw
history blame
5.62 kB
import gradio as gr
from gliner import GLiNER
import torch
"""
Arabic Mental Health Named Entity Recognition Interface
Using GLiNER model: AhmadDarif/Arabic-Mental-NER
"""
# Initialize the model
print("Loading GLiNER model...")
try:
model = GLiNER.from_pretrained("AhmadDarif/Arabic-Mental-NER")
print("Model loaded successfully!")
except:
# Fallback to base model if fine-tuned model not available
print("Fine-tuned model not found, using base model...")
model = GLiNER.from_pretrained("urchade/gliner_multi-v2.1")
# Entity labels
LABELS = ["MEDICATION", "DOSAGE", "DURATION"]
def extract_entities(text):
"""
Extract named entities from Arabic text using GLiNER
"""
if not text.strip():
return "يرجى إدخال نص للتحليل / Please enter text to analyze", ""
try:
# Use GLiNER to predict entities
entities = model.predict_entities(text, LABELS)
if not entities:
return "لم يتم العثور على أي كيانات / No entities found", ""
# Format the results
entities_text = "الكيانات المستخرجة / Extracted Entities:\n\n"
entities_list = []
for entity in entities:
entity_text = entity["text"]
entity_label = entity["label"]
confidence = entity.get("score", 0)
entities_list.append(f"{entity_text} => {entity_label}")
entities_text += f"{entity_text} => {entity_label} (confidence: {confidence:.3f})\n"
# Simple format for copy-paste (matching your exact format)
simple_output = "\n".join(entities_list)
return entities_text, simple_output
except Exception as e:
error_msg = f"خطأ في التحليل / Analysis Error: {str(e)}"
return error_msg, ""
def analyze_text(text):
"""
Main function to analyze Arabic text and return formatted results
"""
detailed_output, simple_output = extract_entities(text)
return detailed_output, simple_output
# Create the Gradio interface
with gr.Blocks(
title="Arabic Mental Health NER",
theme=gr.themes.Soft(),
css="""
.arabic-text {
direction: rtl;
text-align: right;
font-family: 'Arial', 'Tahoma', sans-serif;
}
"""
) as demo:
gr.Markdown("""
# 🧠 Arabic Mental Health Named Entity Recognition
## استخراج الكيانات المسماة للصحة النفسية باللغة العربية
This tool extracts mental health-related entities from Arabic text using GLiNER, including:
- **MEDICATION** (الأدوية): Names of medications
- **DOSAGE** (الجرعة): Dosage information
- **DURATION** (المدة): Duration of treatment
أدخل النص العربي أدناه لاستخراج الكيانات المتعلقة بالصحة النفسية
""")
with gr.Row():
with gr.Column(scale=1):
input_text = gr.Textbox(
label="النص العربي / Arabic Text",
placeholder="أدخل النص العربي هنا... / Enter Arabic text here...",
lines=5,
elem_classes=["arabic-text"]
)
analyze_btn = gr.Button(
"تحليل النص / Analyze Text",
variant="primary",
size="lg"
)
# Add some example texts
gr.Examples(
examples=[
["تناولت سبرالكس بجرعة خمسة مليجرام لمدة ثلاثة أسابيع"],
["وصف الطبيب دواء بروزاك بجرعة عشرة مليجرام يومياً لمدة شهرين"],
["أخذت نصف حبة من الدواء لمدة أسبوعين"],
["الـ سبرالكس بجرعة بسيطة خمسة مليجرام لمدة عشرة أيام"]
],
inputs=input_text,
label="أمثلة / Examples"
)
with gr.Column(scale=1):
detailed_output = gr.Textbox(
label="النتائج التفصيلية / Detailed Results",
lines=10,
elem_classes=["arabic-text"],
interactive=False
)
simple_output = gr.Textbox(
label="تنسيق بسيط للنسخ / Simple Format for Copy",
lines=5,
elem_classes=["arabic-text"],
interactive=False,
info="النتائج بالتنسيق: نص => تصنيف"
)
# Event handlers
analyze_btn.click(
fn=analyze_text,
inputs=[input_text],
outputs=[detailed_output, simple_output]
)
input_text.submit(
fn=analyze_text,
inputs=[input_text],
outputs=[detailed_output, simple_output]
)
gr.Markdown("""
---
**ملاحظة / Note**: هذا النموذج مدرب خصيصاً على البيانات العربية للصحة النفسية باستخدام GLiNER
This model is specifically fine-tuned on Arabic mental health data using GLiNER.
**Entity Types:**
- MEDICATION: أسماء الأدوية والعقاقير
- DOSAGE: معلومات الجرعة والكمية
- DURATION: مدة العلاج والاستخدام
""")
if __name__ == "__main__":
demo.launch()