نحن ندير منتدى متعدد اللغات يحتوي على محتوى عربي وفارسي كبير، وقد واجهنا قيدًا حرجًا في وظيفة البحث يتعلق بالتطبيع الإملائي للغة العربية.
وصف المشكلة
تتضمن الكتابة العربية تمثيلات متعددة لليونيكود للأحرف المتطابقة دلاليًا. للأسف، يبدو أن محرك البحث الحالي في Discourse يعامل هذه الاختلافات على أنها مميزة، مما يؤدي إلى نتائج بحث غير مكتملة أو مضللة.
أمثلة:
البحث عن إطلاق مقامي يعيد فقط التطابقات الدقيقة، بينما يتم استبعاد المشاركات التي تحتوي على اطلاق مقامي أو أطلاق مقامي أو إطلاقمقامي.
وبالمثل، فإن البحث عن ي (U+064A) لا يتطابق مع ی (U+06CC)، وك (U+0643) يفشل في التطابق مع ک (U+06A9)، على الرغم من تكافؤها الوظيفي في السياقات العربية/الفارسية.
لا يؤثر هذا فقط على اختلافات الهمزة (أ، إ، ء، ؤ، ئ) ولكن أيضًا على البدائل الشائعة مثل:
الحرف
يونيكود
التطبيع المقترح
أ، إ، ء، آ
U+0623، U+0625، U+0621، U+0622
تطبيع إلى ا
ؤ
U+0624
تطبيع إلى و
ئ
U+0626
تطبيع إلى ي
ى
U+0649
تطبيع إلى ي
ة
U+0629
تطبيع إلى ه
ي مقابل ی
U+064A مقابل U+06CC
تطبيع إلى ی
ك مقابل ک
U+0643 مقابل U+06A9
تطبيع إلى ک
تتفاقم هذه المشكلة عندما يتجاهل المستخدمون علامات التشكيل أو يستخدمون لوحات مفاتيح مختلفة، مما يؤدي إلى سلوك بحث مجزأ.
الحل المقترح
نوصي بتطبيق طبقة تطبيع مدركة لليونيكود أثناء الفهرسة وتحليل الاستعلامات. يمكن تحقيق ذلك من خلال:
المعالجة المسبقة للمحتوى المفهرس واستعلامات المستخدم لتوحيد اختلافات الأحرف.
تطبيق قواعد التطبيع المشابهة لتلك المستخدمة في مكتبات معالجة اللغة العربية الطبيعية أو محركات البحث (مثل Farasa أو Hazm أو أدوات تعيين مخصصة تعتمد على التعبيرات العادية).
اختياريًا، دعم المطابقة التقريبية أو مسافة ليفنشتاين للمطابقات شبه الدقيقة.
هل يمكن النظر في تضمين هذا التطبيع في محرك البحث الأساسي أو كإضافة (plugin)؟ سيؤدي ذلك إلى تحسين قابلية الاستخدام بشكل كبير للمجتمعات العربية والفارسية التي تستخدم Discourse.
إذا كان هناك حل بديل أو إضافة تعالج هذا الأمر، سنكون ممتنين لأي توجيه.
للإجابة على سؤالك: نعم، تم تفعيل إعداد search_ignore_accents في منتدانا.
للأسف، هذا لا يحل المشكلة التي نواجهها. لا تزال نتائج البحث تفشل في مطابقة الأحرف العربية والفارسية المتكافئة إملائياً، لذا تستمر المشكلة على الرغم من هذا الإعداد.
أعتقد أن هذا طلب معقول لأنه سيحسن تجربة البحث للمواقع العربية والفارسية بشكل كبير. نود مراجعة طلب سحب (PR) ينفذ هذه الميزة، لذلك سأضع عليها علامة pr-welcome.
بالنسبة لأي شخص يقرر العمل على هذه الميزة: يجب أن يتم التحكم في جميع منطق التطبيع خلف إعداد موقع يتيح ذلك افتراضيًا للمواقع العربية والفارسية (انظر locale_default في site_settings.yml) ويجب أن يكون هذا الإعداد متوقفًا افتراضيًا لجميع المواقع الأخرى. يحتوي الأساس بالفعل على منطق تطبيع مشابه للأحرف المشددة (انظر lib/search.rb)، لذا سيكون ذلك مرجعًا مفيدًا عند تنفيذ هذه الميزة.
لست خبيرًا تقنيًا، ولكني كنت أبحث في هذه المشكلة لأنني أريد التأكد من عدم تفويت أي استعلامات بحث في منتدى ثنائي اللغة بالفارسية والعربية. نظرًا لأن Discourse يستخدم PostgreSQL، فإن التطبيع يصبح ضروريًا: قد يبحث المستخدم باستخدام أحرف فارسية، بينما يتم تخزين نفس الكلمة باستخدام أحرف عربية - أو العكس. بدون تطبيع مناسب، ستفشل عملية البحث.
بناءً على ما تعلمته، فإن استخدام تطبيع Unicode NFKC هو نقطة انطلاق قوية - فهو يتعامل مع العديد من حالات التوافق مثل الروابط، وأشكال العرض، والأرقام العربية/الفارسية.
ومع ذلك، بالنسبة للنص الفارسي والعربي، لا يكفي NFKC وحده. فهو لا يقوم بتطبيع العديد من المتغيرات الحرفية الهامة المتكافئة بصريًا ودلاليًا ولكنها تختلف على المستوى الثنائي.
أدناه، أقدم الإجراءات والرؤى التي توصلت إليها من خلال بحثي واستكشافي.