import os import subprocess import sys import gradio as gr # --------------------------------------------------------- # إعداد البيئة (هام جداً لتجنب مشاكل الصلاحيات في Hugging Face) # --------------------------------------------------------- # نحدد مساراً محلياً لتخزين البيانات بدلاً من مجلد النظام المحمي os.environ["CAMELTOOLS_DATA"] = os.path.join(os.getcwd(), "camel_data") # التأكد من إنشاء المجلد if not os.path.exists(os.environ["CAMELTOOLS_DATA"]): os.makedirs(os.environ["CAMELTOOLS_DATA"]) # --------------------------------------------------------- # خطوة 1: تثبيت البيانات مع تجاوز طلب الموافقة (Auto-Confirm) # --------------------------------------------------------- def install_camel_data(): print("⏳ جاري تحميل بيانات Camel Tools (قد يستغرق 2-3 دقائق)...") # اسم الحزمة المطلوبة لنموذج MLE package_name = "disambig-mle-calima-msa-r13" try: # نستخدم الأمر 'yes' ونمرره لأمر التحميل للموافقة التلقائية على أي سؤال # هذا الأمر يعادل ضغط 'y' ثم Enter cmd = f"yes | camel_data -i {package_name}" subprocess.run(cmd, shell=True, check=True) print("✅ تم تحميل البيانات بنجاح.") except subprocess.CalledProcessError as e: print(f"❌ فشل التحميل: {e}") except Exception as e: print(f"❌ حدث خطأ غير متوقع: {e}") # استدعاء دالة التحميل install_camel_data() # --------------------------------------------------------- # خطوة 2: استدعاء المكتبات وبناء النموذج # --------------------------------------------------------- # نقوم بالاستيراد هنا بعد ضمان وجود البيانات from camel_tools.disambig.mle import MLEDisambiguator from camel_tools.tagger.default import DefaultTagger print("⏳ جاري تحميل نموذج التشكيل في الذاكرة...") tagger = None try: # تحميل الموديل المحدد mle = MLEDisambiguator.pretrained('calima-msa-r13') tagger = DefaultTagger(mle, 'diac') print("✅ النموذج جاهز للعمل!") except Exception as e: print(f"❌ خطأ قاتل في تحميل الموديل: {e}") # لن نوقف البرنامج حتى تعمل الواجهة وتظهر الخطأ للمستخدم def diacritize_text(text): if not text: return "" if tagger is None: return "خطأ: فشل تحميل ملفات اللغة (Camel Tools Data). راجع السجلات (Logs)." try: words = text.split() diacritized_words = tagger.tag(words) result = ' '.join(diacritized_words) return result except Exception as e: return f"Error processing text: {str(e)}" # --------------------------------------------------------- # خطوة 3: واجهة المستخدم (متوافقة مع Gradio الجديد) # --------------------------------------------------------- # تم إزالة allow_flagging لأنه يسبب مشاكل في النسخ الجديدة iface = gr.Interface( fn=diacritize_text, inputs=gr.Textbox(lines=3, placeholder="اكتب النص هنا...", label="النص العربي", rtl=True), outputs=gr.Textbox(label="النص المشكّل", rtl=True), title="Camel Tools Diacritizer 🐫", description="API للتشكيل باستخدام نموذج MLE Disambiguator (calima-msa-r13).", examples=[ ["ذهبت الى المدرسة وشربت الماء"], ["القراءة غذاء الروح والعقل"] ] ) if __name__ == "__main__": iface.launch()