سلام عليكم ورحمة الله وبركاته،
مشكور أخ @عادل بن يحي على المبادرة الطيبة وإتاحة الفرصة للمشاركة في تطوير المشروع ضمن هذه السلسلة من المهام.
لقد عملت على مهمة تحسين خوارزمية البحث عن أسماء القرّاء، والتي كان الهدف منها تجاوز محدودية البحث التقليدي القائم على المطابقة المباشرة للنصوص: https://github.com/adelpro/open-tarteel/issues/7
المشكلة التي كانت موجودة: البحث السابق لم يكن يتعامل بشكل كافٍ مع طبيعة اللغة العربية، وهذا يؤدي إلى:
- فشل في المطابقة بسبب اختلاف أشكال الأحرف (الألف والهمزات مثلًا)
- تأثر النتائج بوجود التشكيل
- حساسية مفرطة لاختلاف المسافات
- ضعف التعامل مع الأخطاء الإملائية البسيطة
الحل:
اعتمدت على نهج من مرحلتين:
- تطبيع النصوص (Arabic Normalization) عبر:
- إزالة التشكيل
- توحيد أشكال الألف والهمزات
- توحيد الأرقام
- تنظيف المسافات
- إضافة آلية تخزين مؤقت لتحسين الأداء
- تطبيق البحث التقريبي (Fuzzy Search) باستخدام مكتبة Fuse.js: وذلك لتمكين البحث من تحمّل الأخطاء الإملائية والاختلافات الطفيفة في الكتابة.
اخترت هذا النهج لأنه يفصل بين مرحلة تجهيز البيانات ومرحلة البحث نفسها، مما يجعل النظام أكثر وضوحًا وقابلًا للتطوير مستقبلًا، بدلًا من دمج كل المعالجة داخل منطق التصفية مباشرة.
بعد ذلك أضفت اختبارات باستخدام Vitest لضمان موثوقية منطق البحث واستقراره مع أي تطوير لاحق.
طبعًا تجدر الإشارة هنا إلى أن المشاريع التي تعتمد على اللغة العربية، غالبًا ما لا يكون كافيًا فيها الاكتفاء بالمقارنة النصية المباشرة.
لذا ففصل طبقة التطبيع عن منطق البحث يمنح مرونة أعلى، ويسهّل التعامل مع تحسينات مستقبلية مثل دعم الاشتقاق أو المرادفات أو البحث الصوتي
أرى أن اعتماد طبقة معالجة نصوص معيارية يمكن أن يكون نمطًا متكررًا في أي جزء من مشروع يعتمد على إدخال المستخدم
رابط الـ PR للاطلاع: https://github.com/adelpro/open-tarteel/pull/20