import gradio as gr from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer import torch import random import arabic_reshaper from bidi.algorithm import get_display import re from collections import Counter from transformers import AutoTokenizer, AutoModelForCausalLM import requests from bs4 import BeautifulSoup # تهيئة النموذج try: model_name = "facebook/mbart-large-cc25" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) except Exception as e: print(f"Error loading model: {e}") model = None tokenizer = None class ArticleGenerator: def __init__(self): # تهيئة النموذج والتوكنايزر self.model_name = "facebook/mbart-large-cc25" # نموذج متعدد اللغات يدعم العربية try: self.tokenizer = AutoTokenizer.from_pretrained(self.model_name) self.model = AutoModelForCausalLM.from_pretrained(self.model_name, torch_dtype=torch.float16) self.device = "cuda" if torch.cuda.is_available() else "cpu" self.model.to(self.device) self.model_loaded = True except Exception as e: print(f"خطأ في تحميل النموذج: {e}") self.model_loaded = False def search_topic(self, topic, num_results=5): """البحث عن معلومات حول الموضوع""" results = [] try: # استخدام محرك بحث عربي search_url = f"https://www.google.com/search?q={topic}&hl=ar" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get(search_url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') search_results = soup.find_all('div', class_='g') for result in search_results[:num_results]: title_elem = result.find('h3') snippet_elem = result.find('div', class_='VwiC3b') if title_elem and snippet_elem: results.append({ 'source': 'web', 'title': title_elem.text, 'content': snippet_elem.text }) except Exception as e: print(f"خطأ في البحث: {e}") # في حالة فشل البحث، استخدم محتوى افتراضي results.append({ 'source': 'default', 'title': f'معلومات عن {topic}', 'content': f'يعتبر موضوع {topic} من المواضيع المهمة في وقتنا الحاضر.' }) return results def generate_content_with_research(self, topic, style): """توليد محتوى مبني على البحث""" # البحث عن المعلومات search_results = self.search_topic(topic) # تجميع المعلومات content_parts = [] # إضافة مقدمة content_parts.append(f""" في هذا المقال سنتحدث عن {topic}، وهو موضوع يستحق الدراسة والبحث. """) # إضافة المحتوى الرئيسي for result in search_results: content_parts.append(f""" {result['content']} وكما نرى في واقعنا المعاصر، فإن {topic} يلعب دوراً مهماً في حياتنا. """) # إضافة خاتمة content_parts.append(f""" وفي الختام، يمكننا القول أن {topic} يمثل أهمية كبيرة في عصرنا الحالي. """) # دمج كل الأجزاء final_content = "\n".join(content_parts) # إضافة تحسينات أسلوبية final_content = self.enhance_style(final_content, style) return final_content def enhance_style(self, content, style): """تحسين أسلوب المحتوى""" if style == "أكاديمي رسمي": content = content.replace("نرى", "نلاحظ") content = content.replace("يلعب دوراً", "يؤدي دوراً") content = content.replace("مهم", "ذو أهمية") elif style == "إخباري موضوعي": content = content.replace("نرى", "يتضح") content = content.replace("يلعب دوراً", "يساهم") content = content.replace("مهم", "أساسي") else: # تعليمي تفاعلي content = content.replace("نرى", "نجد") content = content.replace("يلعب دوراً", "يشارك") content = content.replace("مهم", "حيوي") return content def count_words(text): """ حساب عدد الكلمات في النص """ words = re.findall(r'\w+', text) return len(words) def check_title_length(title): """ التحقق من طول العنوان (60-70 حرفاً) """ length = len(title) if length < 60: return title + " " + "".join(["ـ" for _ in range(60 - length)]) elif length > 70: return title[:70] return title def get_keywords(text, min_length=4): """ استخراج الكلمات المفتاحية من النص """ words = re.findall(r'\w+', text) word_freq = Counter(word for word in words if len(word) >= min_length) return [word for word, freq in word_freq.most_common(10)] def get_article_template(article_type): templates = { "علمي": { "structure": [ "تحليل", "وصف", "مناقشة" ], "style": "أكاديمي رسمي", "transitions": [ "وفقاً للدراسات العلمية", "تشير الأبحاث إلى", "من الناحية العلمية", "وفي هذا السياق العلمي", "وبناءً على التحليل المنهجي" ] }, "صحفي": { "structure": [ "العنوان الرئيسي", "الملخص التنفيذي", "تفاصيل الحدث", "التصريحات والآراء", "الخلفية والسياق" ], "style": "إخباري موضوعي", "transitions": [ "وفي تطور لافت", "وفي سياق متصل", "الجدير بالذكر", "وفي تصريحات خاصة", "وعلى صعيد متصل" ] }, "تقني": { "structure": [ "نظرة عامة تقنية", "المواصفات والمميزات", "التطبيقات العملية", "المقارنات التقنية", "النصائح والتوصيات" ], "style": "تقني تفصيلي", "transitions": [ "من الناحية التقنية", "وفيما يتعلق بالمواصفات", "ومن المميزات التقنية", "وعلى المستوى التشغيلي", "وفي سياق التطوير التقني" ] }, "تعليمي": { "structure": [ "مقدمة تعليمية", "الأهداف التعليمية", "شرح المفاهيم الأساسية", "الأمثلة والتطبيقات", "التمارين والأنشطة", "التقييم والمراجعة" ], "style": "تعليمي تفاعلي", "transitions": [ "دعونا نتعرف على", "من المهم أن نفهم", "لنأخذ مثالاً على ذلك", "والآن نطبق ما تعلمناه", "لنراجع ما تعلمناه" ] }, "تسويقي": { "structure": [ "جذب الانتباه", "تحديد المشكلة", "تقديم الحل", "عرض المميزات والفوائد", "دعوة للعمل", "الضمانات والعروض" ], "style": "تسويقي مقنع", "transitions": [ "هل تعاني من", "تخيل معي", "الحل الأمثل هو", "ومن أهم المميزات", "لا تفوت هذه الفرصة" ] }, "اجتماعي": { "structure": [ "الظاهرة الاجتماعية", "الأسباب والعوامل", "التأثيرات المجتمعية", "التجارب والشهادات", "الحلول والتوصيات" ], "style": "اجتماعي تحليلي", "transitions": [ "من منظور اجتماعي", "وفي المجتمع المعاصر", "تشير الدراسات الاجتماعية", "ومن الملاحظ في مجتمعنا", "وفي إطار التحولات الاجتماعية" ] }, "رأي": { "structure": [ "طرح القضية", "وجهة النظر الشخصية", "الأدلة والبراهين", "مناقشة وجهات النظر المختلفة", "الخلاصة والتوصيات" ], "style": "تحليلي نقدي", "transitions": [ "في رأيي الشخصي", "ومن وجهة نظري", "وبناءً على تحليلي", "وعلى النقيض من ذلك", "وفي النهاية أرى" ] }, "ثقافي": { "structure": [ "الخلفية الثقافية", "العناصر والمكونات", "التأثيرات والتفاعلات", "النماذج والأمثلة", "الرؤية المستقبلية" ], "style": "ثقافي تحليلي", "transitions": [ "في السياق الثقافي", "ومن المنظور الثقافي", "وفي التراث الثقافي", "وتجلى ذلك ثقافياً", "وفي المشهد الثقافي" ] } } return templates.get(article_type, templates["علمي"]) def generate_title(topic, style): if style == "أكاديمي رسمي": return f"دراسة تحليلية معمقة حول {topic}: الأبعاد والتطورات والآفاق المستقبلية" elif style == "إخباري موضوعي": return f"{topic}: تطورات جديدة تغير المشهد وتفتح آفاقاً واعدة للمستقبل" elif style == "تقني تفصيلي": return f"تحليل شامل لـ{topic}: المميزات والتطبيقات والحلول المبتكرة" elif style == "تعليمي تفاعلي": return f"دليلك الشامل لفهم {topic}: تعلم خطوة بخطوة" elif style == "تسويقي مقنع": return f"اكتشف قوة {topic}: الحل الأمثل لتحديات اليوم" elif style == "اجتماعي تحليلي": return f"{topic} في المجتمع المعاصر: دراسة تحليلية للظواهر والتأثيرات" elif style == "تحليلي نقدي": return f"رؤية نقدية لـ{topic}: تحليل وتقييم" else: return f"{topic}: رؤية ثقافية معاصرة" def generate_introduction(topic, style, transitions, min_words=200): """توليد مقدمة شاملة للمقال""" intro_parts = [ f"يعد موضوع {topic} من المواضيع الهامة التي تستحق الدراسة والبحث المعمق. حيث يشهد هذا المجال تطورات متسارعة ومتغيرات مستمرة تجعل من دراسته أمراً ضرورياً لفهم أبعاده المختلفة.", f"وفي ظل التطورات العلمية والتكنولوجية المتسارعة، أصبح {topic} محور اهتمام الباحثين والمختصين. حيث تتعدد جوانب دراسته وتتنوع مجالات تطبيقه.", f"ومن خلال هذا المقال، سنقوم بتحليل ودراسة {topic} من مختلف الجوانب، مع التركيز على أهم النقاط والعناصر التي تشكل أساس فهمه وتطويره.", f"كما سنتناول بالتفصيل مختلف التحديات والفرص التي يقدمها {topic}، مع تقديم تحليل معمق للواقع الحالي والتوقعات المستقبلية." ] return "\n\n".join(intro_parts) def generate_main_content(topic, structure, transitions, min_words=800): """توليد المحتوى الرئيسي للمقال مع ضمان حد أدنى من الكلمات""" sections = [] words_per_section = min_words // len(structure) for section_type in structure: if section_type == "تحليل": content = generate_analysis_section(topic, words_per_section) elif section_type == "وصف": content = generate_description_section(topic, words_per_section) else: # مناقشة content = generate_discussion_section(topic, words_per_section) sections.append({ "title": f"{section_type} {topic}", "content": content }) return sections def generate_analysis_section(topic, target_words): """توليد قسم التحليل""" paragraphs = [ f"يتطلب تحليل {topic} دراسة معمقة للعوامل المختلفة المؤثرة في هذا المجال. وتشير الدراسات الحديثة إلى مجموعة من النقاط الرئيسية التي تستحق التحليل والدراسة:", "أولاً: العوامل الرئيسية المؤثرة", f"تتعدد العوامل المؤثرة في مجال {topic}، ويمكن تصنيفها إلى عدة فئات رئيسية. تشمل هذه العوامل الجوانب التقنية والاجتماعية والاقتصادية، حيث يؤثر كل منها بشكل مباشر على تطور وتقدم هذا المجال.", "ثانياً: التحديات والفرص", f"يواجه مجال {topic} مجموعة من التحديات التي تتطلب حلولاً مبتكرة. وفي نفس الوقت، تظهر فرص جديدة يمكن استثمارها لتحقيق تقدم ملموس في هذا المجال.", "ثالثاً: الاتجاهات المستقبلية", f"تشير التوقعات المستقبلية في مجال {topic} إلى اتجاهات واعدة تستحق الدراسة والمتابعة. وتتطلب هذه الاتجاهات تطوير استراتيجيات مناسبة للتعامل معها." ] return "\n\n".join(paragraphs) def generate_description_section(topic, target_words): """توليد قسم الوصف""" paragraphs = [ f"يتميز {topic} بمجموعة من الخصائص والسمات الفريدة التي تجعله موضوعاً مهماً للدراسة والبحث. وفيما يلي وصف تفصيلي لأهم هذه الخصائص:", "أولاً: السمات الأساسية", f"يمتاز {topic} بمجموعة من السمات الأساسية التي تشكل هويته وتميزه عن غيره. وتشمل هذه السمات جوانب متعددة تستحق الدراسة والتحليل.", "ثانياً: المكونات الرئيسية", f"يتكون {topic} من عدة مكونات رئيسية تتفاعل فيما بينها لتشكل نظاماً متكاملاً. كل مكون له دوره وأهميته في المنظومة الكلية.", "ثالثاً: آليات العمل", f"تعتمد آليات العمل في {topic} على مجموعة من الأسس والمبادئ التي تضمن كفاءة وفعالية الأداء. وتتطلب هذه الآليات فهماً عميقاً لطبيعة العمل وأهدافه." ] return "\n\n".join(paragraphs) def generate_discussion_section(topic, target_words): """توليد قسم المناقشة""" paragraphs = [ f"تثير مناقشة {topic} العديد من النقاط المهمة التي تستحق التحليل والدراسة. وفيما يلي أهم النقاط التي تمت مناقشتها:", "أولاً: وجهات النظر المختلفة", f"تتعدد وجهات النظر حول {topic}، حيث يقدم كل اتجاه رؤية مختلفة تستند إلى مجموعة من الأدلة والبراهين. وتسهم هذه التعددية في إثراء النقاش وتعميق الفهم.", "ثانياً: الآراء المتباينة", f"تختلف الآراء حول {topic} باختلاف المنطلقات الفكرية والخلفيات العلمية. ويسهم هذا التنوع في تقديم فهم أشمل وأعمق للموضوع.", "ثالثاً: نقاط الاتفاق والاختلاف", f"رغم تعدد الآراء حول {topic}، إلا أن هناك نقاط اتفاق مشتركة تشكل أساساً للحوار والنقاش. كما أن نقاط الاختلاف تفتح المجال لمزيد من البحث والدراسة." ] return "\n\n".join(paragraphs) def generate_conclusion(topic, style, min_words=200): """توليد خاتمة شاملة للمقال""" conclusion_parts = [ f"وفي ختام هذا المقال حول {topic}، يمكننا القول أن هذا الموضوع يمثل مجالاً خصباً للدراسة والبحث. حيث تتعدد جوانبه وتتنوع تطبيقاته.", f"كما أظهرت الدراسة أن {topic} يواجه العديد من التحديات التي تتطلب مزيداً من البحث والتطوير. وفي نفس الوقت، هناك فرص واعدة يمكن استثمارها وتطويرها.", f"ومن خلال ما تم عرضه، يتضح أن مستقبل {topic} يحمل الكثير من الإمكانات والفرص. وهذا ما يجعل الاستمرار في دراسته وتطويره أمراً ضرورياً.", f"وأخيراً، نؤكد على أهمية مواصلة البحث والدراسة في مجال {topic}، مع الأخذ بعين الاعتبار المتغيرات المستمرة والتطورات المتسارعة في هذا المجال." ] return "\n\n".join(conclusion_parts) def format_article(article): """تنسيق المقال بشكل منظم ومرتب""" # تنسيق العنوان الرئيسي formatted_text = f"""
{qa['answer']}