وحدات الماكرو للخريطة الغامضة ومنطق القوس

تدعم Aura تجميع قواعد المعالجة المسبقة المتعددة في ملفات FUZZY_MAP_pre.py لتنفيذها بشكل تسلسلي كمسار متماسك بمجرد تشغيل “قاعدة البدء”. يصف هذا المستند فلسفة التصميم وبناء الجملة وتدفق التنفيذ لهذه الميزة.

                            ## مبادئ التصميم الأساسية
  1. عدم التكرار: تظل القواعد الموجودة داخل المجموعة عبارة عن مجموعات بايثون القياسية: (\'replacement_text'، r'regex_pattern'، العتبة، flags_and_options)

  2. ** سهولة الاستخدام المزدوجة **: القواعد الفردية داخل المجموعة هي قواعد مستقلة تعمل بكامل طاقتها. إذا لم يتم تشغيل المجموعة، فسيتم تقييمها بشكل طبيعي في الحلقة الأصلية.

  3. علامة النهاية السلبية: يتم تحديد نهاية المجموعة من خلال إدخال قاعدة سلبية لا تتم مطابقتها أبدًا من تلقاء نفسها. إنه يعمل فقط كعلامة حدودية للمحلل اللغوي.

  4. الاحتياطي المختلط (إلحاق عند عدم التطابق): عندما تكون المجموعة نشطة، يجب أن تساهم كل قاعدة داخلية في الإخراج. إذا كان التعبير العادي للقاعدة الداخلية يطابق النص، فسيتم إجراء الاستبدال العادي. إذا لم يكن متطابقًا، فسيتم إلحاق النص البديل بالنص الحالي بمسافة.

                                                                       ---
    
                                   ## بناء الجملة والبنية
    

يتم تعريف مجموعة الماكرو عن طريق التفاف سلسلة من القواعد القياسية بين قاعدة البدء وقاعدة النهاية في FUZZY_MAP_pre.py.

                                         ### 1. قاعدة البداية

قاعدة البداية هي قاعدة قياسية تقوم بتشغيل الماكرو عند مطابقتها. يتضمن مفتاح “group_start” في قاموس الخيارات الخاص به:

('replacement', r'start_pattern', 100, {'group_start': 'unique_group_name'})
                                   ### 2. القواعد الداخلية

القواعد الداخلية هي قواعد قياسية يتم وضعها بالتسلسل بعد قاعدة البدء. أنها لا تتطلب أي بيانات وصفية خاصة:

('inner_replacement', r'inner_pattern', 100, {})
   ### 3. القاعدة النهائية (العلامة السلبية)

تحتوي قاعدة النهاية على بديل None ونمط فارغ ومفتاح ``group_end’` في قاموس الخيارات الخاص بها:

(None, r'', 100, {'group_end': 'unique_group_name'})
                                                                      ---

                                                   ## مثال ملموس

فيما يلي حالة اختبار عملية محددة في ملف FUZZY_MAP_pre.py:

FUZZY_MAP_pre = [
    # Start Rule: Triggers the group 'sandbox_test' when "start sandbox" matches
    ('Sandbox:', r'start\w* sandbox', 100, {'group_start': 'sandbox_test'}),
    
    # Inner Rule 1: Replaces "apfel" with "birne" if present
    ('birne', r'apfel', 100, {}),
    
    # Inner Rule 2: Replaces "banane" if present, otherwise appends "banane"
    ('banane', r'banane', 100, {}),
    
    # End Rule: Passive boundary marker
    (None, r'', 100, {'group_end': 'sandbox_test'}),
]
                        ### سيناريوهات تدفق التنفيذ:

               * **السيناريو أ (الماكرو المشغل)**:
            * الإدخال: `"بدء وضع الحماية مع apfel"`
                                           * التدفق المتوقع:
  1. تطابق قاعدة البداية "start sandbox" وتستبدلها بـ "Sandbox:" -> النص الحالي: "Sandbox: mit apfel". 2. يتم تشغيل المجموعة ``sandbox_test’`.

  2. نقوم بتشغيل القواعد الداخلية بشكل متكرر على "Sandbox: mit apfel":

  • القاعدة الداخلية 1 تطابق "apfel" وتستبدل بـ "birne" -> النص الحالي: "Sandbox: mit birne".

  • القاعدة الداخلية 2 لا تتطابق مع الموزة. نظرًا لأن المجموعة نشطة، فإنها تعود إلى إلحاق "banane" -> النص الحالي: "Sandbox: mit birnebanane".

  1. يتم إرجاع النص النهائي "Sandbox: mit birnebanane" وتصحيحه بواسطة LanguageTool. * الإخراج: "Sandbox: mit Birne Banane"

  • السيناريو ب (ماكرو غير مشغل - سهولة الاستخدام المزدوج): * الإدخال: ``ein apfel und eine kirsche’’ * التدفق المتوقع:

  1. قاعدة البداية غير متطابقة. تظل المجموعة ``sandbox_test’` غير نشطة. 2. تنتقل الحلقة إلى القاعدة التالية.

  2. القاعدة الداخلية 1: تطابق "apfel" وتستبدلها بـ "birne" -> النص الحالي: "ein birne und eine kirsche".

  3. القاعدة الداخلية 2: غير متطابق. نظرًا لعدم تشغيل المجموعة، تعمل القاعدة كقاعدة مستقلة عادية ولا يتم إلحاق أي شيء. 5. يتم تجاهل القاعدة النهائية. * الإخراج: "ein birne und eine kirsche"

                                                                       ---
    
                    ## التفاصيل الفنية (تحت الغطاء)
    
  • التكرار المعزول: عند تشغيل مجموعة، يستدعي المحرك بشكل متكرر process_text_in_background مع custom_rules=[inner_rule]. يسمح هذا لكل قاعدة داخلية بالتنفيذ ضمن مسار كامل ومتزامن لخط الأنابيب. * ضمانات الأداء والاستقرار:

  • تجاوز التسلسل: تتجاوز عمليات التشغيل العودية الداخلية قائمة انتظار التسلسل chunk_id لمنع الجمود وتأخير التنفيذ.

  • منع الإدخال/الإخراج وتحويل النص إلى كلام: تعمل عمليات التشغيل العودية على منع كتابة الملفات المتوسطة ومخرجات كلام تحويل النص إلى كلام، مما يضمن كتابة ونطق النص الثابت النهائي فقط.

  • حماية الاستقرار: يتم إيقاف التشغيل العودي بشكل صارم بعد تكرار واحد لمنع حلقات الاستقرار اللانهائية أثناء الإلحاق الاحتياطي.

  • الإنهاء الآمن: يعتمد التحقق من الاستقرار بشكل صارم على الحد الأقصى لعدد التكرارات (MAX_ITERATIONS_FOR_SAFETY) لمنع الحلقات اللانهائية، وتجاوز الاختناق المستند إلى الوقت الذي قد يؤدي إلى إحباط عمليات تنفيذ الماكرو المشروعة والأبطأ قبل الأوان. CODE_BLOCK_4