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"""

{article['title']}

مقدمة

{article['introduction']}

المحتوى الرئيسي

""" # إضافة المحتوى الرئيسي مع ترقيم الأقسام for i, section in enumerate(article['main_content'], 1): formatted_text += f"""

{i}. {section['title']}

{section['content']}
""" # إضافة الأسئلة الشائعة formatted_text += """

الأسئلة الشائعة

""" for i, qa in enumerate(article['faq'], 1): formatted_text += f"""

سؤال {i}: {qa['question']}

{qa['answer']}

""" # إضافة الخاتمة formatted_text += f"""

الخاتمة

{article['conclusion']}
""" return formatted_text def generate_faq(topic, style): if style == "أكاديمي رسمي": questions = [ f"ما هي الأسس النظرية التي يقوم عليها {topic}؟", f"كيف يمكن تطوير منهجية البحث في مجال {topic}؟", f"ما هي أبرز التحديات البحثية في مجال {topic}؟" ] elif style == "إخباري موضوعي": questions = [ f"ما هي أحدث التطورات في مجال {topic}؟", f"كيف يؤثر {topic} على القطاعات المختلفة؟", f"ما هي توقعات الخبراء لمستقبل {topic}؟" ] elif style == "تقني تفصيلي": questions = [ f"ما هي المميزات التقنية الرئيسية لـ{topic}؟", f"كيف يمكن تطبيق {topic} في المشاريع العملية؟", f"ما هي متطلبات تنفيذ حلول {topic}؟" ] elif style == "تعليمي تفاعلي": questions = [ f"ما هي المفاهيم الأساسية التي يجب فهمها في مجال {topic}؟", f"كيف يمكن تعزيز فهمك لمجال {topic}؟", f"ما هي الأهداف التعليمية التي يجب تحقيقها في مجال {topic}؟" ] elif style == "تسويقي مقنع": questions = [ f"ما هي الحلول الفعالة التي نقدمها لمجال {topic}؟", f"كيف يمكن تحسين أدائك في مجال {topic}؟", f"ما هي المميزات التي تتميز بها منتجاتنا أو خدماتنا في مجال {topic}؟" ] elif style == "اجتماعي تحليلي": questions = [ f"ما هي الظواهر الاجتماعية التي تؤثر على مجال {topic}؟", f"كيف يمكن تحليل التأثيرات الاجتماعية في مجال {topic}؟", f"ما هي الحلول الممكنة للتحديات الاجتماعية في مجال {topic}؟" ] elif style == "تحليلي نقدي": questions = [ f"ما هي النقاط القوية والضعف في مجال {topic}؟", f"كيف يمكن تقييم الأداء في مجال {topic}؟", f"ما هي التوصيات التي يمكن تقديمها لتحسين أداء مجال {topic}؟" ] else: questions = [ f"ما هي التأثيرات الثقافية التي تؤثر على مجال {topic}؟", f"كيف يمكن تحليل التفاعلات الثقافية في مجال {topic}؟", f"ما هي الحلول الممكنة للتحديات الثقافية في مجال {topic}؟" ] faq = [] for q in questions: faq.append({ "question": q, "answer": f"""يمكن الإجابة على هذا السؤال من خلال تحليل معمق للجوانب المختلفة المتعلقة بـ{topic}. وتشير الدراسات والتجارب العملية إلى مجموعة من النقاط الهامة التي تساعد في فهم وتطوير هذا المجال.""" }) return faq def get_random_variations(): """توليد تنويعات عشوائية للمحتوى""" variations = { "فقرات_افتتاحية": [ "في عصر يتسم بالتطور المتسارع", "في ظل التحولات العميقة التي يشهدها عالمنا", "مع تزايد الاهتمام العالمي", "في خضم التغيرات المتسارعة", "في إطار السعي المتواصل نحو التطوير" ], "عبارات_ربط": [ "وفي هذا السياق", "ومن هذا المنطلق", "وبناءً على ما سبق", "وفي ضوء ذلك", "وتأسيساً على ما تقدم" ], "خواتيم": [ "وفي الختام، يمكن القول", "وختاماً، نخلص إلى", "وفي نهاية المطاف", "وبناءً على ما سبق", "وفي ضوء ما تقدم" ] } return variations def get_synonyms(word): """قاموس المرادفات للكلمات الشائعة""" synonyms = { "مهم": ["حيوي", "أساسي", "جوهري", "محوري", "رئيسي"], "تطور": ["تقدم", "نمو", "ارتقاء", "تحسن", "ازدهار"], "تأثير": ["أثر", "مفعول", "نتيجة", "انعكاس", "تداعيات"], "دراسة": ["بحث", "تحليل", "استقصاء", "فحص", "تمحيص"], "تحليل": ["دراسة", "تفكيك", "تشريح", "استقراء", "تفسير"] } return synonyms.get(word, [word]) def enhance_text_variation(text): """تحسين تنوع النص وجعله أكثر طبيعية""" # قائمة من الكلمات المتنوعة للربط transitions = [ "وبالتالي", "علاوة على ذلك", "إضافة إلى ذلك", "من ناحية أخرى", "في هذا السياق", "جدير بالذكر", "ومن الجدير بالملاحظة", "وفي هذا الإطار", "ومن المهم أن نذكر", "وفي ضوء ما سبق" ] # قائمة من التعبيرات الشخصية personal_touches = [ "ومن الملفت للنظر", "ومن المثير للاهتمام", "ومما لا شك فيه", "وكما نلاحظ", "وكما يتضح لنا" ] paragraphs = text.split('\n\n') enhanced_paragraphs = [] for i, paragraph in enumerate(paragraphs): if len(paragraph.strip()) > 0: # إضافة كلمات ربط متنوعة if i > 0 and random.random() < 0.4: # 40% احتمالية paragraph = f"{random.choice(transitions)}, {paragraph}" # إضافة تعبيرات شخصية if random.random() < 0.3: # 30% احتمالية words = paragraph.split() insert_pos = random.randint(0, len(words) - 1) words.insert(insert_pos, random.choice(personal_touches)) paragraph = ' '.join(words) enhanced_paragraphs.append(paragraph) return '\n\n'.join(enhanced_paragraphs) def add_human_touch(text): """إضافة لمسة إنسانية للنص""" # إضافة تعبيرات شخصية personal_expressions = [ "في رأيي الشخصي", "من وجهة نظري", "كما أرى", "من خلال تجربتي", "بناءً على ملاحظاتي" ] # إضافة روابط عاطفية emotional_connections = [ "من المثير للاهتمام", "من المدهش", "من الملفت للنظر", "من المؤثر حقاً", "مما يجعلنا نشعر" ] # إضافة أمثلة من الحياة اليومية daily_examples = [ "على سبيل المثال في حياتنا اليومية", "كما نرى في واقعنا المعاصر", "وهذا ما نلاحظه في محيطنا", "كما يحدث معنا يومياً", "وهذا ما نختبره في حياتنا" ] # تقسيم النص إلى فقرات paragraphs = text.split('\n\n') enhanced_paragraphs = [] for i, paragraph in enumerate(paragraphs): if len(paragraph.strip()) > 0: # إضافة تعبيرات إنسانية بشكل عشوائي if random.random() < 0.3: # 30% احتمالية paragraph = f"{random.choice(personal_expressions)}, {paragraph}" if random.random() < 0.2: # 20% احتمالية paragraph = f"{paragraph} {random.choice(emotional_connections)}." if random.random() < 0.15: # 15% احتمالية paragraph = f"{paragraph} {random.choice(daily_examples)}." enhanced_paragraphs.append(paragraph) return '\n\n'.join(enhanced_paragraphs) def check_grammar_and_style(text): """تحسين القواعد والأسلوب""" # تصحيح الأخطاء الشائعة common_mistakes = { "الذي": "الذي", "الذين": "الذين", "التي": "التي", "اللذين": "اللذين", "اللتين": "اللتين" } for mistake, correction in common_mistakes.items(): text = text.replace(mistake, correction) # تحسين علامات الترقيم text = text.replace(" ،", "،") text = text.replace(" .", ".") text = text.replace(" ؛", "؛") text = text.replace(" :", ":") # تحسين المسافات text = re.sub(r'\s+', ' ', text) # توحيد المسافات text = re.sub(r'\s*\n\s*', '\n', text) # تنظيف المسافات حول الأسطر الجديدة # تحسين الأسلوب text = text.replace(" .", ".") text = text.replace(" ،", "،") text = text.replace("،،", "،") text = text.replace("..", ".") # إضافة مسافة بعد علامات الترقيم text = re.sub(r'([.،؛؟!])\s*([^\s])', r'\1 \2', text) return text def generate_additional_content(topic, style, words_needed): """توليد محتوى إضافي للوصول إلى عدد الكلمات المطلوب""" sections = [ f"وفي سياق متصل، يمكن الإشارة إلى أن {topic} يشهد تطورات مستمرة", f"ومن الجدير بالذكر أن دراسات حديثة في مجال {topic} قد أظهرت نتائج مثيرة للاهتمام", f"وعلاوة على ذلك، فإن التطبيقات العملية لـ {topic} تتنوع بشكل كبير" ] return " ".join(sections[:words_needed//50]) # تقريب تقديري لعدد الكلمات المطلوبة def trim_content(text, target_word_count): """تقليص المحتوى للوصول إلى عدد الكلمات المطلوب""" words = text.split() if len(words) <= target_word_count: return text # الحفاظ على المقدمة والخاتمة paragraphs = text.split("\n\n") intro = paragraphs[0] conclusion = paragraphs[-1] # تقليص المحتوى الرئيسي main_content = "\n\n".join(paragraphs[1:-1]) main_words = main_content.split() words_to_keep = target_word_count - len(intro.split()) - len(conclusion.split()) trimmed_main = " ".join(main_words[:words_to_keep]) return f"{intro}\n\n{trimmed_main}\n\n{conclusion}" def insert_additional_content(text, additional_content): """إدراج المحتوى الإضافي في المكان المناسب من المقال""" paragraphs = text.split("\n\n") # إدراج المحتوى قبل الخاتمة paragraphs.insert(-2, additional_content) return "\n\n".join(paragraphs) def generate_article(topic, article_type, word_count=1500, formality="رسمي"): # إنشاء مولد المقالات generator = ArticleGenerator() template = get_article_template(article_type) structure = template["structure"] style = template["style"] transitions = template["transitions"] # تعديل الأسلوب حسب مستوى الرسمية if formality == "رسمي": style = "أكاديمي رسمي" elif formality == "شبه رسمي": style = "إخباري موضوعي" else: # عادي style = "تعليمي تفاعلي" # توليد المحتوى مع البحث researched_content = generator.generate_content_with_research(topic, style) # تقسيم المحتوى إلى أقسام sections = [] content_parts = researched_content.split('\n\n') for i, section_type in enumerate(structure): start_idx = i * (len(content_parts) // len(structure)) end_idx = (i + 1) * (len(content_parts) // len(structure)) section_content = '\n\n'.join(content_parts[start_idx:end_idx]) sections.append({ "title": f"{section_type} {topic}", "content": section_content }) # إنشاء المقال article = { "title": generate_title(topic, style), "introduction": generate_introduction(topic, style, transitions), "main_content": sections, "conclusion": generate_conclusion(topic, style), "faq": generate_faq(topic, style) } # تنسيق المقال formatted_text = format_article(article) # تحسين المحتوى enhanced_text = enhance_text_variation(formatted_text) humanized_text = add_human_touch(enhanced_text) final_text = check_grammar_and_style(humanized_text) return final_text # إنشاء واجهة المستخدم with gr.Blocks(title="مساعد كتابة المقالات العربية") as demo: gr.Markdown(""" # 📝 مساعد كتابة المقالات العربية ### نظام متطور لإنشاء مقالات عربية احترافية ومتنوعة """) with gr.Tab("إنشاء مقال احترافي"): with gr.Row(): topic_input = gr.Textbox( label="موضوع المقال", placeholder="أدخل موضوع المقال هنا...", lines=2 ) article_type = gr.Dropdown( choices=["علمي", "صحفي", "تقني", "تعليمي", "تسويقي", "اجتماعي", "رأي", "ثقافي"], label="نوع المقال", value="علمي" ) with gr.Row(): word_count_slider = gr.Slider( minimum=500, maximum=3000, value=1500, step=100, label="عدد الكلمات المطلوب" ) formality_level = gr.Dropdown( choices=["رسمي", "شبه رسمي", "عادي"], label="مستوى الرسمية", value="رسمي" ) with gr.Row(): generate_btn = gr.Button("إنشاء المقال", variant="primary") copy_btn = gr.Button("نسخ المقال") output = gr.Textbox( label="المقال المُنشأ", lines=30, show_copy_button=True ) word_count_output = gr.Textbox(label="عدد الكلمات الفعلي") def generate_and_format(topic, article_type, word_count, formality): article = generate_article(topic, article_type, word_count, formality) return article def count_words(text): words = text.split() return f"عدد الكلمات: {len(words)}" generate_btn.click( fn=generate_and_format, inputs=[topic_input, article_type, word_count_slider, formality_level], outputs=[output] ).then( fn=count_words, inputs=[output], outputs=[word_count_output] ) copy_btn.click( fn=lambda x: x, inputs=[output], outputs=[output] ) demo.launch()