معرّف اللغةCompatible with Milvus v2.5.15+

language_identifier هو مُعرّف لغة متخصص مصمم لتعزيز قدرات البحث عن النص في ميلفوس من خلال أتمتة عملية تحليل اللغة. وتتمثل وظيفته الأساسية في الكشف عن لغة حقل النص ثم تطبيق محلل تم تكوينه مسبقًا بشكل ديناميكي وهو الأكثر ملاءمة لتلك اللغة. يعد هذا الأمر ذا قيمة خاصة للتطبيقات التي تتعامل مع مجموعة متنوعة من اللغات، حيث أنه يلغي الحاجة إلى تعيين اللغة يدويًا على أساس كل مدخل.

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

سير عمل الكشف عن اللغة

يقوم language_identifier بتنفيذ سلسلة من الخطوات لمعالجة سلسلة نصية، وهو سير عمل مهم للمستخدمين لفهم كيفية تكوينه بشكل صحيح.

Language Detection Workflow سير عمل اكتشاف اللغة

  1. الإدخال: يبدأ سير العمل بسلسلة نصية كمدخلات.

  2. اكتشاف اللغة: يتم تمرير هذه السلسلة أولاً إلى محرك اكتشاف اللغة، والذي يحاول تحديد اللغة. يدعم Milvus محركين: whatlang و lingua.

  3. اختيار المحلّل:

    • النجاح: إذا تم اكتشاف اللغة بنجاح، يتحقق النظام مما إذا كان اسم اللغة المكتشفة يحتوي على محلل مطابق تم تكوينه في قاموسك analyzers. إذا تم العثور على تطابق، يقوم النظام بتطبيق المحلل المحدد على النص المدخل. على سبيل المثال، سيتم توجيه النص المكتشف "لغة الماندرين" إلى محلل الرموز jieba.

    • احتياطي: إذا فشل الاكتشاف، أو إذا تم اكتشاف لغة ما بنجاح ولكنك لم تقدم محللًا محددًا لها، يقوم النظام بالتطبيق الافتراضي لمحلل افتراضي تم تكوينه مسبقًا. هذه نقطة مهمة للتوضيح؛ فالمحلل default هو محلل احتياطي لكل من فشل الكشف وعدم وجود محلل مطابق.

بعد اختيار المحلّل المناسب، يتم ترميز النص ومعالجته، ليكتمل سير العمل.

محركات الكشف اللغوي المتاحة

يقدم ميلفوس الاختيار بين محركين للكشف عن اللغة:

يعتمد الاختيار على متطلبات الأداء والدقة المحددة لتطبيقك.

المحرك

السرعة

الدقة

تنسيق الإخراج

الأفضل ل

whatlang

سريع

جيد لمعظم اللغات

أسماء اللغات (على سبيل المثال، "English" ، "Mandarin" ، ، "Japanese")

المرجع عمود اللغة في جدول اللغات المدعومة

تطبيقات الوقت الحقيقي حيث السرعة أمر بالغ الأهمية

lingua

أبطأ

دقة أعلى، خاصة للنصوص القصيرة

أسماء اللغات الإنجليزية (على سبيل المثال، "English" ، "Chinese" ، ، "Japanese")

مرجع: قائمة اللغات المدعومة

التطبيقات التي تكون فيها الدقة أكثر أهمية من السرعة

هناك اعتبار حاسم هو اصطلاح التسمية الخاص بالمحرك. بينما يقوم كلا المحركين بإرجاع أسماء اللغات باللغة الإنجليزية، إلا أنهما يستخدمان مصطلحات مختلفة لبعض اللغات (على سبيل المثال، whatlang يُرجع Mandarin ، بينما lingua يُرجع Chinese). يجب أن يكون مفتاح المحلل مطابقًا تمامًا للاسم الذي يُرجعه محرك الكشف المختار.

التكوين

لاستخدام أداة الترميز language_identifier بشكل صحيح، يجب اتخاذ الخطوات التالية لتحديد تكوينها وتطبيقها.

الخطوة 1: اختر لغاتك ومحللاتك

إن جوهر إعداد language_identifier هو تخصيص المحللات الخاصة بك للغات المحددة التي تخطط لدعمها. يعمل النظام من خلال مطابقة اللغة المكتشفة مع المحلل الصحيح، لذا فإن هذه الخطوة ضرورية لمعالجة النص بدقة.

فيما يلي جدول موصى به لتعيين اللغات مع محللات ميلفوس المناسبة. يعمل هذا الجدول كجسر بين مخرجات محرك الكشف عن اللغة وأفضل أداة للمهمة.

اللغة (مخرجات الكاشف)

المحلل الموصى به

الوصف

English

type: english

ترميز قياسي للغة الإنجليزية مع تصفية الجذعية وكلمات التوقف.

Mandarin (عن طريق whatlang) أو Chinese (عن طريق lingua)

tokenizer: jieba

تجزئة الكلمات الصينية للنصوص غير المحدّدة المسافات.

Japanese

tokenizer: icu

أداة ترميز قوية للنصوص المعقدة، بما في ذلك اليابانية.

French

type: standard, filter: ["lowercase", "asciifolding"]

تكوين مخصص يتعامل مع اللكنات والأحرف الفرنسية.

الخطوة 2: تحديد analyzer_params

لاستخدام أداة الترميز language_identifier في Milvus، قم بإنشاء قاموس يحتوي على هذه المكونات الرئيسية:

المكونات المطلوبة:

  • analyzers مجموعة التكوين - قاموس يحتوي على جميع تكوينات المحلل، والتي يجب أن تتضمن:

    • default - المحلل الاحتياطي المستخدم في حالة فشل اكتشاف اللغة أو عدم العثور على محلل مطابق

    • المحللات الخاصة باللغة - كل محللخاص باللغة - يتم تعريف كل منها على أنه <analyzer_name>: <analyzer_config> ، حيث:

      • analyzer_name يطابق مخرجات محرك الكشف الذي اخترته (على سبيل المثال، "English" ، "Japanese")

      • analyzer_config يتبع تنسيق معلمات المحلل القياسي (انظر نظرة عامة على المحلل)

مكونات اختيارية:

  • identifier - يحدد محرك اكتشاف اللغة المراد استخدامه (whatlang أو lingua). افتراضي إلى whatlang إذا لم يتم تحديده

  • mapping - ينشئ أسماء مستعارة مخصصة لمحللاتك، مما يسمح لك باستخدام أسماء وصفية بدلاً من تنسيق الإخراج الدقيق لمحرك الكشف

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

يجب أن تتطابق أسماء المحللات الخاصة بك تمامًا مع مخرجات محرك اكتشاف اللغة الذي اخترته. هذا النهج أبسط ويتجنب الالتباس المحتمل.

بالنسبة لكل من whatlang و lingua ، استخدم أسماء اللغات كما هو موضح في الوثائق الخاصة بكل منهما:

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",  # Must be `language_identifier`
        "identifier": "whatlang",  # or `lingua`
        "analyzers": {  # A set of analyzer configs
            "default": {
                "tokenizer": "standard"  # fallback if language detection fails
            },
            "English": {  # Analyzer name that matches whatlang output
                "type": "english"
            },
            "Mandarin": {  # Analyzer name that matches whatlang output
                "tokenizer": "jieba"
            }
        }
    }
}

النهج البديل: الأسماء المخصصة مع التعيين

إذا كنت تفضل استخدام أسماء المحللين المخصصة أو تحتاج إلى الحفاظ على التوافق مع التكوينات الحالية، يمكنك استخدام المعلمة mapping. يؤدي ذلك إلى إنشاء أسماء مستعارة لمحللاتك - ستعمل كل من أسماء محرك الكشف الأصلية وأسماءك المخصصة.

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua",
        "analyzers": {
            "default": {
                "tokenizer": "standard"
            },
            "english_analyzer": {  # Custom analyzer name
                "type": "english"
            },
            "chinese_analyzer": {  # Custom analyzer name
                "tokenizer": "jieba"
            }
        },
        "mapping": {
            "English": "english_analyzer",   # Maps detection output to custom name
            "Chinese": "chinese_analyzer"
        }
    }
}

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

أمثلة

فيما يلي بعض التكوينات الجاهزة للاستخدام للسيناريوهات الشائعة. يتضمن كل مثال كلاً من التكوين ورمز التحقق حتى تتمكن من اختبار الإعداد على الفور.

الكشف عن اللغة الإنجليزية والصينية

from pymilvus import MilvusClient

# Configuration
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "whatlang",
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "Mandarin": {"tokenizer": "jieba"}
        }
    }
}

# Test the configuration
client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

# English text
result_en = client.run_analyzer("The Milvus vector database is built for scale!", analyzer_params)
print("English:", result_en)
# Output: 
# English: ['The', 'Milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']

# Chinese text  
result_cn = client.run_analyzer("Milvus向量数据库专为大规模应用而设计", analyzer_params)
print("Chinese:", result_cn)
# Output: 
# Chinese: ['Milvus', '向量', '数据', '据库', '数据库', '专', '为', '大规', '规模', '大规模', '应用', '而', '设计']

اللغات الأوروبية مع تطبيع اللكنة

# Configuration for French, German, Spanish, etc.
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua", 
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "French": {
                "tokenizer": "standard",
                "filter": ["lowercase", "asciifolding"]
            }
        }
    }
}

# Test with accented text
result_fr = client.run_analyzer("Café français très délicieux", analyzer_params)
print("French:", result_fr)
# Output: 
# French: ['cafe', 'francais', 'tres', 'delicieux']

ملاحظات الاستخدام

  • لغة واحدة لكل حقل: يعمل على الحقل كوحدة نصية واحدة متجانسة. وهو مصمم للتعامل مع لغات مختلفة عبر سجلات بيانات مختلفة، مثل أن يحتوي أحد السجلات على جملة إنجليزية ويحتوي السجل التالي على جملة فرنسية.

  • لا توجد سلاسل لغات مختلطة: لم يتم تصميمه للتعامل مع سلسلة واحدة تحتوي على نص من لغات متعددة. على سبيل المثال، سيتم معالجة حقل واحد VARCHAR يحتوي على جملة إنجليزية وعبارة يابانية مقتبسة كلغة واحدة.

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