علا صالح السلام عليكم ورحمة الله وبركاته
شكرا جزيلا لحضرتك على الملاحظات الى قدمتيها وانا سعيد انى ارد على اسئلتك :
س1- بخصوص البسلمه بتظهر كجزء من الايه الاولى فى كل سوره وعند تشغيل التلاوه لا تظهر
ج1- المشكلة ليست في الكود الخاص بي بل في "الداتا" الصوتية (Audio Files) لكل قارئ فا مثلا لو حضرتك غيرتى للقارئ احمد ابن على العجمي هتلاقى تلقائيا كل سوره الايه الاولى بتبدأ بالبسمله ودا لانى مثلا القارئ محمد صديق المنشاوى بتكون تسجيلاته مقسمة بحيث تبدأ الآية الأولى مباشرة لأن البسمله تُعتبر في بعض التسجيلات "مقطعاً مستقلاً" أو تم تسجيلها مرة واحدة للسورة كاملة او لجزء كامل من القران ولكن مثلا في أغلب قواعد البيانات الصوتية (API) الخاصة بالقارئ محود خليل الحصرى او القارئ احمد بن على العجمي تم دمج صوت البسملة مع أول آية في ملف صوتي واحد.
س2- بالنسبه لميزة البحث المتقدم وهل البحث بيعتمد على partial matching
ج2- بخصوص ما لاحظته من ظهور كلمة "التنور" عند البحث عن "نور" فا انا فعلا بستعمل حاليا المطابقة الجزئية وهشرح لحضرتك الخوارزمية وكيف أعمل على تطويرها لتصبح أكثر ذكاءً ودقه :
1. كيف صممت خوارزمية البحث
أنا أعتمد حالياً على نظام الفلترة المزدوجة
المرحلة الأولى (الـ Normalization): أقوم بإنشاء "نسخة بحث" من نص القرآن، أجردها من كل شيء (التشكيل، علامات الوقف، والأهم الألف الخنجرية التي أقوم بتحويلها برمجياً إلى ألف عادية).
المرحلة الثانية (الفلتر الجزئي): أستخدم أمر LIKE %keyword%. وهذا هو السبب في ظهور "التنور" عند البحث عن "نور"، لأن الكود ببساطة يبحث عن أي تتابع من الحروف يحتوي على (ن-و-ر) بغض النظر عما قبله أو بعده.
2. كيف أعمل على ضبط دقة النتائج حالياً؟
أنا الآن بصدد تطوير الفلتر ليكون أكثر ذكاءً من خلال ثلاثة مستويات للتحكم في الدقة:
أ- تقنية الـ حدود الكلمة او تسمى Word Boundary
بدلاً من البحث الجزئي المفتوح، أعمل على إضافة منطق برمجي يميز الكلمة المستقلة. بحيث لو بحثت عن "نور" ككلمة كاملة، تظهر لك "نور" فقط، أما إذا أردت "نور" كمقطع، تظهر النتائج الأخرى. هذا يتم عبر إضافة مسافات برمجية قبل وبعد الكلمة في استعلام البحث.
ب- ترتيب النتائج حسب "الأولوية" (Ranking Logic):
الخوارزمية الجديدة التي أطورها ستقوم بترتيب النتائج كالتالي:
المطابقة التامة: الآيات التي تحتوي على كلمة "نور" منفصلة تظهر أولاً.
المطابقة الجزئية: الكلمات التي تبدأ بـ "نور" (مثل نورهم).
المطابقة المدمجة: الكلمات التي تحتوي على المقطع في وسطها (مثل التنور) تأتي في ذيل القائمة.
ج- التعامل الذكي مع "الألف الخنجرية" و"الرسم العثماني":
التحدي الذي أعمل عليه الآن هو جعل الخوارزمية تفهم أن (إسحٰق) بالرسم العثماني هي نفسها (اسحق) التي يكتبها المستخدم في لوحة المفاتيح. أنا لا أكتفي بمسح الألف الخنجرية، بل أجعل الخوارزمية "تتوقع" مكانها برمجياً لضمان عدم ضياع أي آية.
ما الهدف القادم؟
أطمح لأن يتحول المحرك من مجرد "فلتر" يبحث عن حروف، إلى "محرك بحث دلالي". بحيث لو أخطأ المستخدم في حرف أو نسي الألف (بسبب الرسم العثماني المعقد)، يظل التطبيق قادراً على إعطائه النتيجة الصحيحة بفضل خوارزمية الـ String Distance (مثل Levenshtein distance) التي تقيس مدى قرب الكلمة المكتوبة من الكلمة الأصلية.
هدفي أن يكون "فَذكِّر" هو الأسرع والأدق، مع الحفاظ على تلك السكينة البصرية زى ما حضرتك قلتى.