Spaces:
Running
Running
| import gradio as gr | |
| from transformers import pipeline | |
| import torch | |
| # ----------------------------------------------------------------- | |
| # 1. تحديد الحد الأقصى للطول (نفس الذي استخدمته في التدريب) | |
| MAX_LENGTH = 512 | |
| # 2. تحميل المودل الخاص بك من الـ Hub | |
| # سيقوم "pipeline" بتحميل المودل والتوكنايزر الخاص بك | |
| # (iMeshal/arabic-sentiment-classifier-marbert) | |
| # device=0 لاستخدام الـ GPU (إذا كان متاحاً في الـ Space) | |
| print("Loading model pipeline...") | |
| try: | |
| pipe = pipeline( | |
| "sentiment-analysis", | |
| model="iMeshal/arabic-sentiment-classifier-marbert", | |
| device=0 if torch.cuda.is_available() else -1 | |
| ) | |
| print("Model loaded successfully.") | |
| except Exception as e: | |
| print(f"Error loading model: {e}") | |
| pipe = None # تعيينه كـ None ليتم التعامل معه لاحقاً | |
| # ----------------------------------------------------------------- | |
| # 3. دالة التنبؤ (التي ستتصل بـ Gradio) | |
| def predict_sentiment(text): | |
| # رسالة خطأ إذا لم يتم تحميل المودل | |
| if pipe is None: | |
| return "حدث خطأ فادح: لم يتم تحميل المودل. يرجى مراجعة سجلات الـ Space." | |
| # 3.1. التحقق من الطول (كما طلبت) | |
| if len(text) > MAX_LENGTH: | |
| return f"⚠️ النص طويل جدًا! الحد الأقصى هو {MAX_LENGTH} حرف." | |
| if len(text.strip()) == 0: | |
| return "⚠️ الرجاء إدخال نص." | |
| # 3.2. إرسال النص إلى المودل | |
| try: | |
| result = pipe(text)[0] # نحصل على النتيجة الأولى | |
| # 3.3. تنسيق المخرجات | |
| label = result['label'] | |
| score = result['score'] | |
| # المودل يُرجع LABEL_0 (سلبي) و LABEL_1 (إيجابي) | |
| if label == 'LABEL_1': | |
| sentiment = "🟢 إيجابي" | |
| else: | |
| sentiment = "🔴 سلبي" | |
| return f"{sentiment} (بثقة: {score:.2%})" | |
| except Exception as e: | |
| return f"حدث خطأ أثناء التحليل: {str(e)}" | |
| # ----------------------------------------------------------------- | |
| # 4. بناء واجهة Gradio | |
| iface = gr.Interface( | |
| fn=predict_sentiment, | |
| inputs=gr.Textbox( | |
| lines=4, | |
| placeholder="اكتب تغريدة أو جملة عربية هنا..." | |
| ), | |
| outputs=gr.Text(), | |
| title="📊 MARBERT لتحليل المشاعر العربية", | |
| description=f"أدخل نصًا (بحد أقصى {MAX_LENGTH} حرف) لمعرفة ما إذا كان إيجابيًا أم سلبيًا. (المودل: iMeshal/arabic-sentiment-classifier-marbert)", | |
| examples=[ | |
| ["هذا المنتج رائع جداً وأنصح به بشدة"], | |
| ["أسوأ خدمة عملاء واجهتها على الإطلاق"], | |
| ["الجو اليوم جميل لكنه حار قليلاً"] | |
| ], | |
| allow_flagging="never" # لإخفاء زر "Flag" | |
| ) | |
| # 5. تشغيل الواجهة | |
| iface.launch() |