أفضل الممارسات ل Seaching للحصول على أشكال بديلة من كلمة مع لوسين

StackOverflow https://stackoverflow.com/questions/893436

سؤال

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

يرجى ملاحظة: هذا الموقع لديه فقط المحتوى الإنجليزي.

بعض الأساليب التي فكرت بها:

  1. ابحث عن الكلمة في نوع من ملف Thesaurus لتحديد النماذج البديلة من كلمة معينة.
    • بعض الأمثلة:
      • يبحث عن "سيارة"، كما تضيف "سيارات" للاستعلام.
      • يبحث عن "Care"، إضافة أيضا "يحمل" و "حمل" إلى الاستعلام.
      • يبحث عن "صغير"، كما يضيف "أصغر" و "أصغر" للاستعلام.
      • يبحث عن "CAN"، إضافة أيضا "لا يمكن"، "لا يمكن"، "علب"، و "المعلبة" للاستعلام.
      • وينبغي أن تعمل في الاتجاه المعاكس (أي البحث عن "يحمل" يجب أن تضيف "حمل" و "حمل").
    • العيوب:
      • لا يعمل من أجل العديد من الكلمات الفنية الجديدة ما لم يتم تحديث القاموس / المرادفات بشكل متكرر.
      • لست متأكدا من أداء البحث في ملف Thesaurus.
  2. توليد النماذج البديلة مجدأة، بناء على بعض الاستدلال.
    • بعض الأمثلة:
      • إذا انتهت الكلمة في "S" أو "ES" أو "ED" أو "ER" أو "EST"، إسقاط لاحقة
      • إذا انتهت الكلمة في "IES" أو "ied" أو "ier" أو "iest"، وتحويل إلى "Y"
      • إذا انتهت الكلمة في "y"، وتحويل إلى "IES"، "ied"، "ier"، و "iest"
      • حاول إضافة "S" و "ES" و "ER" و "EST" على الكلمة.
    • العيوب:
      • يولد الكثير من كلمات غير الكلمات لمعظم المدخلات.
      • يشعر وكأنه اختراق.
      • يبدو وكأنه شيء تجده على thedailywtf.com. :)
  3. شيء أكثر تطورا؟

أفكر في القيام بنوع من الجمع بين النهجين الأولين، لكنني لست متأكدا من أين أجد ملف Thesaurus (أو ما يسمىه، ك "Thesaurus" ليس صحيحا تماما، ولكن لا "قاموس" ).

هل كانت مفيدة؟

المحلول

النظر في بما في ذلك PorterStemFilter في خط أنابيب التحليل الخاص بك. تأكد من إجراء نفس التحليل على الاستفسارات المستخدمة عند بناء الفهرس.

لقد استخدمت أيضا لانكستر الناشئ خوارزمية مع نتائج جيدة. باستخدام PorterStemFilter كدليل، من السهل الاندماج مع لوسين.

نصائح أخرى

Word Stemming يعمل موافق للغة الإنجليزية، ولكن من أجل اللغات التي تكون فيها Word Stemming مستحيل تقريبا (مثل Mine) خيار # 1 قابلة للحياة. أنا أعرف واحدة على الأقل من هذا التنفيذ لغتي (الأيسلاندية) لوسين التي يبدو أنها تعمل بشكل جيد للغاية.

بعض من يشبهون أفكار أنيقة جميلة. شخصيا، أود فقط إضافة بعض العلامات إلى الاستعلام (تحويل الاستعلام) لجعله غامض، أو يمكنك استخدام المدمج fuzzyquery., ، والتي تستخدم مسافات تحرير Levenshtein، والتي من شأنها أن تساعد على الإخاذات.

باستخدام البحث غامض "استعلام العلامات"، يستخدم Levenshtein أيضا. النظر في بحث عن "سيارة". إذا قمت بتغيير الاستعلام إلى "السيارة ~"، فستجد "سيارة" و "سيارات" وهلم جرا. هناك تحويلات أخرى للاستعلام التي يجب أن تتعامل مع كل ما تحتاجه تقريبا.

إذا كنت تعمل في مجال متخصص (فعلت هذا مع البستنة) أو بلغة لا تلعب بشكل جيد مع طرق Stemming العادية، فيمكنك استخدام تسجيل الاستعلام لإنشاء جدول Stemming يدوي.

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

Stemming طريقة قياسية جميلة لمعالجة هذه المشكلة. لقد وجدت أن العتال Stemmer هو وسيلة للعدوانية للبحث عن الكلمات الرئيسية القياسية. إنه ينتهي بالكلمات التي تتخلى مع معاني مختلفة. جرب خوارزمية KstemMer.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top