import gradio as gr import torch from transformers import ( AutoTokenizer, AutoModelForCausalLM, AutoModelForSequenceClassification, pipeline ) from datasets import load_dataset import numpy as np import re import os # تعيين توكن Hugging Face من متغير بيئي HF_TOKEN = os.getenv('HF_TOKEN') if not HF_TOKEN: raise ValueError("يرجى تعيين متغير البيئة HF_TOKEN") # تهيئة النماذج print("جاري تهيئة النماذج...") base_model_name = "aubmindlab/aragpt2-base" sentiment_model_name = "CAMeL-Lab/bert-base-arabic-camelbert-msa" # تهيئة المعالجات tokenizer = AutoTokenizer.from_pretrained(base_model_name, use_auth_token=HF_TOKEN) model = AutoModelForCausalLM.from_pretrained(base_model_name, use_auth_token=HF_TOKEN) # إعداد معالجات النصوص text_generator = pipeline( 'text-generation', model=model, tokenizer=tokenizer, device=0 if torch.cuda.is_available() else -1 ) sentiment_analyzer = pipeline( 'sentiment-analysis', model=sentiment_model_name, tokenizer=AutoTokenizer.from_pretrained(sentiment_model_name), device=0 if torch.cuda.is_available() else -1 ) def clean_arabic_text(text): # إزالة الأسطر الجديدة والمسافات الزائدة text = ' '.join(text.split()) # إزالة التشكيل text = re.sub(r'[\u064B-\u065F\u0670]', '', text) # إزالة الرموز غير المرغوب فيها text = re.sub(r'[^\u0600-\u06FF\s]', ' ', text) # توحيد الألف والياء text = re.sub('[إأآا]', 'ا', text) text = re.sub('[ىي]', 'ي', text) # إزالة التكرار text = re.sub(r'(.)\1+', r'\1', text) return text.strip() def analyze_sentiment(text): try: result = sentiment_analyzer(text)[0] if result['label'] == 'positive': return "إيجابي", result['score'] elif result['label'] == 'negative': return "سلبي", result['score'] else: return "محايد", result['score'] except: return "محايد", 0.5 def summarize_text(text, max_length=100): try: summary = text_generator( f"لخص النص التالي: {text}", max_length=max_length, num_return_sequences=1, no_repeat_ngram_size=2, do_sample=True, top_k=50, top_p=0.95, temperature=0.7 )[0]['generated_text'] return summary except: return "لم نتمكن من تلخيص النص" def suggest_response(text): try: response = text_generator( f"اقترح رداً مناسباً على النص التالي: {text}", max_length=150, num_return_sequences=1, no_repeat_ngram_size=2, do_sample=True, top_k=50, top_p=0.95, temperature=0.7 )[0]['generated_text'] return response except: return "لم نتمكن من توليد رد مناسب" def detect_topics(text): topics = { "سياسة": ["حكومة", "وزير", "برلمان", "رئيس", "انتخابات"], "اقتصاد": ["اقتصاد", "سوق", "بورصة", "أسهم", "استثمار"], "رياضة": ["كرة", "مباراة", "فريق", "لاعب", "بطولة"], "تكنولوجيا": ["تقنية", "إنترنت", "تطبيق", "برمجة", "ذكاء اصطناعي"], "ثقافة": ["فن", "أدب", "مسرح", "سينما", "موسيقى"] } text_lower = text.lower() detected = [] for topic, keywords in topics.items(): if any(keyword in text_lower for keyword in keywords): detected.append(topic) return detected if detected else ["عام"] def analyze_text(text, include_summary=True, include_response=True): if not text.strip(): return "الرجاء إدخال نص للتحليل" try: # تنظيف النص cleaned_text = clean_arabic_text(text) # تحليل المشاعر sentiment, confidence = analyze_sentiment(cleaned_text) # تحديد المواضيع topics = detect_topics(cleaned_text) # إنشاء التقرير report = f"""🔍 تحليل النص: 📝 النص الأصلي: {text} 📊 التحليل الأساسي: • المشاعر: {sentiment} (الثقة: {confidence:.1%}) • المواضيع: {', '.join(topics)} """ # إضافة التلخيص إذا مطلوب if include_summary: summary = summarize_text(cleaned_text) report += f"\n✨ ملخص النص:\n{summary}" # إضافة الرد المقترح إذا مطلوب if include_response: response = suggest_response(cleaned_text) report += f"\n💡 الرد المقترح:\n{response}" return report except Exception as e: return f"⚠️ حدث خطأ أثناء التحليل: {str(e)}" # إنشاء واجهة المستخدم demo = gr.Interface( fn=analyze_text, inputs=[ gr.Textbox( label="أدخل النص هنا", placeholder="اكتب نصاً عربياً هنا للتحليل...", lines=5 ), gr.Checkbox( label="تضمين ملخص للنص", value=True ), gr.Checkbox( label="تضمين رد مقترح", value=True ) ], outputs=gr.Textbox(label="نتائج التحليل", lines=12), title="🤖 المحلل الذكي للنصوص العربية", description="""نموذج متقدم لتحليل النصوص العربية وتوليد الردود ✨ المميزات: • تحليل المشاعر في النص • تحديد المواضيع الرئيسية • تلخيص النص • اقتراح ردود مناسبة • معالجة متقدمة للغة العربية """, theme="default" ) # تشغيل الواجهة if __name__ == "__main__": print("جاري تشغيل النموذج...") demo.launch()