صفحة 1 من 1

كيف تمت برمجة محركات البحث؟

مرسل: الأحد 01 أغسطس 2021, الساعة 10:42
بواسطة السهلي
تمهيد
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
إذا أنجزت محرك بحث عن الجمل في النصوص فقد اكملت نصف المهمة في بناء محرك بحث حقيقي.
وسأناقش في هذا المقال ما عملناها في موقع العنقاء، وما نعزم عمله في المستقبل إن شاء الله.

محركات بحث مفتوحة المصدر
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
لمن أراد أن ينطلق في هذا المجال بدون معاناة أكبر فإننا نقول هنا أنه يوجد محركات بحث مفتوحة المصدر كـ Solr و Elasticsearch و Sphinx وغيرها (1). فما عليك إلا أن تحمل أحدها وتدرسه دراسة كافية ومن خلاله تستطيع بناء محرك بحث فعال. فقد تعاملنا مع شركات تعتمد على Elasticsearch أو Solr، وحسب علمنا أنهما يفتقران لخوارزميات بحث قوية، ويبدوا انهما يستخدمان SVMRank أو شيء شبيه بها، ورغم أن هذه الخوارزمية جميلة لكن كما يبدوا أنها لم تبرمج بفعالية فيهما. ونفس المشكل تعاني منه شركات أخرى تعتمد على هذه المحركات البحثية المفتوحة المصدر.

محركات العنقاء البحثية
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
بخصوص العنقاء، فقد تمت برمجة محركات بحث مختلفة بمهام خاصة من الصفر. وهي تحت التحسين والتطوير الدائمين. ونحن، بكل بساطة، نستخدم TF-IDF
و +BM25 حاليا للبحث عن الجمل (نتائج مرضية لكن ليست بتلك الكفاءة المرغوبة)، أما الكلمات المفردة والصور فلها خوارزميات خاصة. وقد قمنا أيضا بتطوير العديد من الخوارزميات في الذكاء الإصطناعي الخاصة بالبحث عن الجمل (خصوصا الفرع المسمى LTR أو Learning-to-rank). لم تُربط هذه الخوارزميات بعد بموقع العنقاء.

محرك البحث عن الصور
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
صورة
صورة

ستجد تفاصيل أكبر عنه في المقال المعنون كيف تمت برمجة محرك البحث عن الصور؟.

محرك البحث عن الكلمات
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
صورة
انطلق بناء نظام العنقاء ببرمجة هذا المحرك بالذات أولا. ولك أن تتساءل لماذا؟ والجواب عن هذا السؤال أن غرضنا كان بسيطا في البداية، وهو تمكين المستخدم من العثور على معاني الكلمات المبحوث عنها. وهذا الأمر جَرَّنا إلى برمجة مستخرج الجذور الذي تم ربطه بمعظم الخورازميات البحثية؛ وذلك من أجل تسهيل مهمتها في العثور على المداخل المناسبة للقواميس.
وستجد عند بحثك في العنقاء أن محرك البحث عن الكلمات ستختلف نتائجه حسب نوع المهمة المرغوبة. ولتوضيح ذلك فإنك إن بحثت عن كلمة مثل الديموقراطية في قاموس المعاني فستجد أنه سيقدم كلمة الديموقراطية عن ديموقراطي ثم دمقرط. بينما إذا ضغطت على تصريف أو إشتقاق فإنه سيلغي كل الكلمات ويحتفظ بـ دمقرط ظنا منه أنها الفعل المناسب للتصريف أو الاشتقاق.

ولنقل أن المحرك البحثي عن الكلمات لم يستطع أن يجد الكلمة المبحوث عنها في مداخل المعاجم العربية (مثلا ديموقراطي). فوقتئذ، سيخول الأمر لأخيه الأكبر محرك البحث عن الجمل ليتكفل بالمهمة وينقب عنها داخل النصوص. أما إذا أراد المستخدم إجبار المحرك على إيجاد الكلمة المبحوثة بالذات مهما كلف الأمر، فحينئذ سيطيع محرك بحثنا هذا أوامر المستخدم إذا وضع الكلمة بين علامتي اقتباس، هكذا "شيوخ". وفي هذه الحالة سَتُعاد نفس آلية التعاون بين المحركين لإيجاد ما يطلبه صاحبنا.

محرك البحث عن الجمل
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
صورة

إذا أردت أن تنشأ محرك بحث عن الجمل في النصوص، فعليك إذن اتباع ما يلي:
  1. منظف النصوص: لتنظيف النص من الكلمات والرموز غير المرغوبة. وقد اضطررنا إلى إزالة الحركات والواو وبعض حروف الزيادة والتاء المربوطة وتوحيد شكل الهمزة وإزالة أداة التعريف ال وهلم جرا.
  2. مستخرج الصفات لكل نص: نعني هنا أننا قمنا بإحصاء أولي للنصوص لمعرفة عدد الأبيات الشعرية والصور والمشتقات والأحاديث والآيات والأمثال إلخ... ألا تظن أن النص الذي يحتوي على هذا التنوع سيكون الأمثل لإبرازه للمستخدم!؟
  3. مستخرج الميزات لكل نص: هنا نحسب أشياء أخرى كعدد الكلمات في النص، وتردد الكلمات (يدعى TF) في النص، وتردد النصوص بالنسبة للكلمات (يدعى IDF) ودوال رياضية أخرى كـ BM25 ومتغيراتها و PageRank، وهكذا ذواليك...
تقوم المستخرجات بحفظ كل هذه المعلومات في قواعد بيانات، وتعمل على تحديثها كلما تمت إضافة قواميس جديدة للموقع.
وقد قمنا باستخدام البحث عن الجمل باستخدام خوارزمية البحث TF-IDF، وعطلنا عمل الخوارزميات الأخرى إلى حين التحقق من كفاءتها.

المراجع
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
(1) https://www.linuxlinks.com/searchengines/