اذهب إلى المحتوى
  • 0

مشكلة تشكيل الكلمات والبحث في قاعدة البيانات

الوالو الأعظم

السؤال

السلام عليكم قمت بصناعة قاموس محلي صغير للكلمات باستعمال Laravel و MySql  وأخزن الكلمات في قاعدة البيانات بطريقة صحيحة أي باحترام الهمزات حروف الهاء والتاء المربوطة والياء والألف المقصورة والأهم من كل هذا ان الكلمات المخزنة مشكلة أي بها حركات ليسهل قراءتها ، مشكلتي أثناء الاستعلام عن إحدى هذه الكلمات حيث يتطلب الأمر البحث عن كلمات متطابقة لما هو موجود في قاعدة البيانات خاصة موضوع كالتشكيل لذا أود إيجاد حل يسمح بتجاهل تشكيل الكلمات مثلا أو لايقوم ببحث حرفي للكلمات وإنما شيئ مقارب .

هذا كود الاستعلام لدي 

 

 $query->when($filters['search'] ?? false, fn($query, $search) =>
            $query->where(fn($query) =>
                $query->where('term', 'like', '%' . $search . '%')
                    ->orWhere('ar_meaning', 'like', '%' . $search . '%')

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

إذا أردت تجاهل التشكيل بشكل كامل، تتوفر مكتبات لتحويل الكلمات إلى نص بدون تشكيل، مثل:

وبالنسبة لحل للبحث بشكل مقارب بدون التجاهل الكامل للتشكيل، فعليك استخدام ميزة الترتيب حسب الشبهية (Fuzzy Search) مع بعض التعديلات على الكود، وتتوفر مكتبة مثل "scout" مع Elasticsearch لتحقيق ذلك.

وهناك مكتبة جاهزة توفر لك ذلك عليك قراءة المستند الخاص بها:

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

هناك طرق كثيرة لحل هذه المشكلة ولكن اسهلهم هي التغير قليلا في ال queries لديك 
 

$query->when($filters['search'] ?? false, fn($query, $search) =>
            $query->where(fn($query) =>
                $query->where('term', 'like', '%' . str_slug($search) . '%')
                    ->orWhere('ar_meaning', 'like', '%' . str_slug($search) . '%')
            )
        );


هكذا سيقوم بتجاهل الحركات و التشكيل و يبحث عن الكلمة نفسها

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 10‏/12‏/2023 at 20:06 قال Ahmed Emad35:

هناك طرق كثيرة لحل هذه المشكلة ولكن اسهلهم هي التغير قليلا في ال queries لديك 
 

$query->when($filters['search'] ?? false, fn($query, $search) =>
            $query->where(fn($query) =>
                $query->where('term', 'like', '%' . str_slug($search) . '%')
                    ->orWhere('ar_meaning', 'like', '%' . str_slug($search) . '%')
            )
        );


هكذا سيقوم بتجاهل الحركات و التشكيل و يبحث عن الكلمة نفسها

يخبرني المحرر أن دالة str_slug() غير معرفة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 5‏/12‏/2023 at 08:59 قال Mustafa Suleiman:

إذا أردت تجاهل التشكيل بشكل كامل، تتوفر مكتبات لتحويل الكلمات إلى نص بدون تشكيل، مثل:

وبالنسبة لحل للبحث بشكل مقارب بدون التجاهل الكامل للتشكيل، فعليك استخدام ميزة الترتيب حسب الشبهية (Fuzzy Search) مع بعض التعديلات على الكود، وتتوفر مكتبة مثل "scout" مع Elasticsearch لتحقيق ذلك.

وهناك مكتبة جاهزة توفر لك ذلك عليك قراءة المستند الخاص بها:

 

نعم أنا أود حلا لتجاوز التشكيل بشكل كامل لكن كيف يمكن تطبيقه مشكلتي ليست محاولة تحويل الكلمة إلى كلمة أخرى دون تشكيل مشكلتي أن الكلمات المخزنة في قاعدة البيانات تحوي تشكيلا ، كيف يمكن للمستخدم الذي يبحث عن كلمة غير مشكلة أن يجلب نفس الكلمة لكن بالتشكيل من قاعدة البيانات ؟ 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...