haraka / app.py
xTHExBEASTx's picture
Update app.py
fc1db8d verified
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()