Spaces:
Sleeping
Sleeping
File size: 3,881 Bytes
ba88116 fc1db8d ba88116 fc1db8d ba88116 fc1db8d ba88116 fc1db8d ba88116 fc1db8d ba88116 fc1db8d ba88116 fc1db8d ba88116 fc1db8d 41dd28e fc1db8d ba88116 fc1db8d ba88116 fc1db8d ba88116 fc1db8d 41dd28e ba88116 fc1db8d ba88116 fc1db8d 41dd28e ba88116 fc1db8d ba88116 fc1db8d 41dd28e fc1db8d ba88116 fc1db8d 41dd28e ba88116 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 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() |