xTHExBEASTx commited on
Commit
fc1db8d
·
verified ·
1 Parent(s): ba88116

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -26
app.py CHANGED
@@ -1,71 +1,88 @@
1
  import os
2
  import subprocess
3
  import sys
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  # ---------------------------------------------------------
6
- # خطوة 1: التأكد من تحميل بيانات Camel Tools تلقائياً
7
  # ---------------------------------------------------------
8
  def install_camel_data():
9
- print("جاري التحقق من بيانات Camel Tools...")
10
- # نحاول استدعاء أمر التحميل. الخيار -y يوافق تلقائياً، والبيانات هي الخاصة بالتشكيل
 
 
 
11
  try:
12
- subprocess.run(["camel_data", "-i", "morphology-db-msa-r13", "-y"], check=True)
13
- print("تم تحميل البيانات بنجاح.")
 
 
 
 
 
14
  except Exception as e:
15
- print(f"حدث خطأ أثناء تحميل البيانات: {e}")
16
 
17
- # تشغيل دالة التحميل قبل استدعاء المكتبات التي تعتمد عليها
18
  install_camel_data()
19
 
20
  # ---------------------------------------------------------
21
  # خطوة 2: استدعاء المكتبات وبناء النموذج
22
  # ---------------------------------------------------------
23
- import gradio as gr
24
  from camel_tools.disambig.mle import MLEDisambiguator
25
  from camel_tools.tagger.default import DefaultTagger
26
 
27
- print("جاري تحميل نموذج التشكيل (MLE Disambiguator)...")
28
 
29
- # تحميل الموديل (قد يأخذ دقيقة في أول مرة)
30
  try:
 
31
  mle = MLEDisambiguator.pretrained('calima-msa-r13')
32
  tagger = DefaultTagger(mle, 'diac')
 
33
  except Exception as e:
34
- print(f"خطأ في تحميل الموديل: {e}")
35
- tagger = None
36
 
37
  def diacritize_text(text):
38
  if not text:
39
  return ""
40
  if tagger is None:
41
- return "خطأ: لم يتم تحميل النموذج بشكل صحيح."
42
 
43
  try:
44
- # تقسيم النص إلى كلمات لأن Camel Tools تتعامل كلمة كلمة بناءً على السياق
45
  words = text.split()
46
- # التشكيل
47
  diacritized_words = tagger.tag(words)
48
- # إعادة تجميع النص
49
  result = ' '.join(diacritized_words)
50
  return result
51
  except Exception as e:
52
- return f"Error: {str(e)}"
53
 
54
  # ---------------------------------------------------------
55
- # خطوة 3: واجهة المستخدم والـ API
56
  # ---------------------------------------------------------
 
57
  iface = gr.Interface(
58
  fn=diacritize_text,
59
- inputs=gr.Textbox(lines=5, placeholder="اكتب النص هنا...", label="النص العربي (غير مشكل)", rtl=True),
60
- outputs=gr.Textbox(label="النص المشكّل (Camel Tools)", rtl=True),
61
- title="API التشكيل الاحترافي (Camel Tools) 🐫",
62
- description="هذا النموذج يستخدم مكتبة Camel Tools الأكاديمية لفك لبس الكلمات وتشكيلها بدقة عالية (Self-contained).",
63
  examples=[
64
  ["ذهبت الى المدرسة وشربت الماء"],
65
- ["الذكاء الاصطناعي علم المستقبل"],
66
- ["كتب الطالب الدرس بقلم رصاص"]
67
- ],
68
- allow_flagging="never"
69
  )
70
 
71
  if __name__ == "__main__":
 
1
  import os
2
  import subprocess
3
  import sys
4
+ import gradio as gr
5
+
6
+ # ---------------------------------------------------------
7
+ # إعداد البيئة (هام جداً لتجنب مشاكل الصلاحيات في Hugging Face)
8
+ # ---------------------------------------------------------
9
+ # نحدد مساراً محلياً لتخزين البيانات بدلاً من مجلد النظام المحمي
10
+ os.environ["CAMELTOOLS_DATA"] = os.path.join(os.getcwd(), "camel_data")
11
+
12
+ # التأكد من إنشاء المجلد
13
+ if not os.path.exists(os.environ["CAMELTOOLS_DATA"]):
14
+ os.makedirs(os.environ["CAMELTOOLS_DATA"])
15
 
16
  # ---------------------------------------------------------
17
+ # خطوة 1: تثبيت البيانات مع تجاوز طلب الموافقة (Auto-Confirm)
18
  # ---------------------------------------------------------
19
  def install_camel_data():
20
+ print("جاري تحميل بيانات Camel Tools (قد يستغرق 2-3 دقائق)...")
21
+
22
+ # اسم الحزمة المطلوبة لنموذج MLE
23
+ package_name = "disambig-mle-calima-msa-r13"
24
+
25
  try:
26
+ # نستخدم الأمر 'yes' ونمرره لأمر التحميل للموافقة التلقائية على أي سؤال
27
+ # هذا الأمر يعادل ضغط 'y' ثم Enter
28
+ cmd = f"yes | camel_data -i {package_name}"
29
+ subprocess.run(cmd, shell=True, check=True)
30
+ print("✅ تم تحميل البيانات بنجاح.")
31
+ except subprocess.CalledProcessError as e:
32
+ print(f"❌ فشل التحميل: {e}")
33
  except Exception as e:
34
+ print(f"حدث خطأ غير متوقع: {e}")
35
 
36
+ # استدعاء دالة التحميل
37
  install_camel_data()
38
 
39
  # ---------------------------------------------------------
40
  # خطوة 2: استدعاء المكتبات وبناء النموذج
41
  # ---------------------------------------------------------
42
+ # نقوم بالاستيراد هنا بعد ضمان وجود البيانات
43
  from camel_tools.disambig.mle import MLEDisambiguator
44
  from camel_tools.tagger.default import DefaultTagger
45
 
46
+ print("جاري تحميل نموذج التشكيل في الذاكرة...")
47
 
48
+ tagger = None
49
  try:
50
+ # تحميل الموديل المحدد
51
  mle = MLEDisambiguator.pretrained('calima-msa-r13')
52
  tagger = DefaultTagger(mle, 'diac')
53
+ print("✅ النموذج جاهز للعمل!")
54
  except Exception as e:
55
+ print(f"خطأ قاتل في تحميل الموديل: {e}")
56
+ # لن نوقف البرنامج حتى تعمل الواجهة وتظهر الخطأ للمستخدم
57
 
58
  def diacritize_text(text):
59
  if not text:
60
  return ""
61
  if tagger is None:
62
+ return "خطأ: فشل تحميل ملفات اللغة (Camel Tools Data). راجع السجلات (Logs)."
63
 
64
  try:
 
65
  words = text.split()
 
66
  diacritized_words = tagger.tag(words)
 
67
  result = ' '.join(diacritized_words)
68
  return result
69
  except Exception as e:
70
+ return f"Error processing text: {str(e)}"
71
 
72
  # ---------------------------------------------------------
73
+ # خطوة 3: واجهة المستخدم (متوافقة مع Gradio الجديد)
74
  # ---------------------------------------------------------
75
+ # تم إزالة allow_flagging لأنه يسبب مشاكل في النسخ الجديدة
76
  iface = gr.Interface(
77
  fn=diacritize_text,
78
+ inputs=gr.Textbox(lines=3, placeholder="اكتب النص هنا...", label="النص العربي", rtl=True),
79
+ outputs=gr.Textbox(label="النص المشكّل", rtl=True),
80
+ title="Camel Tools Diacritizer 🐫",
81
+ description="API للتشكيل باستخدام نموذج MLE Disambiguator (calima-msa-r13).",
82
  examples=[
83
  ["ذهبت الى المدرسة وشربت الماء"],
84
+ ["القراءة غذاء الروح والعقل"]
85
+ ]
 
 
86
  )
87
 
88
  if __name__ == "__main__":