Spaces:
Sleeping
Sleeping
| 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() |