جيبا

تقوم أداة الترميز jieba بمعالجة النص الصيني عن طريق تقسيمه إلى الكلمات المكونة له.

تحتفظ أداة ترميز jieba برموز بعلامات الترقيم كرموز منفصلة في المخرجات. على سبيل المثال، "你好!世界。" تصبح ["你好", "!", "世界", "。"]. لإزالة علامات الترقيم المستقلة هذه، استخدم عامل التصفية removepunct عامل التصفية.

التكوين

يدعم ميلفوس طريقتين لتكوين أداة الترميز jieba: تكوين بسيط وتكوين مخصص.

التكوين البسيط

باستخدام التكوين البسيط، ما عليك سوى تعيين أداة الترميز على "jieba". على سبيل المثال:

# Simple configuration: only specifying the tokenizer name
analyzer_params = {
    "tokenizer": "jieba",  # Use the default settings: dict=["_default_"], mode="search", hmm=True
}
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("tokenizer", "jieba");
const analyzer_params = {
    "tokenizer": "jieba",
};
analyzerParams = map[string]any{"tokenizer": "jieba"}
# restful
analyzerParams='{
  "tokenizer": "jieba"
}'

هذا التكوين البسيط يعادل التكوين المخصص التالي:

# Custom configuration equivalent to the simple configuration above
analyzer_params = {
    "type": "jieba",          # Tokenizer type, fixed as "jieba"
    "dict": ["_default_"],     # Use the default dictionary
    "mode": "search",          # Use search mode for improved recall (see mode details below)
    "hmm": True                # Enable HMM for probabilistic segmentation
}
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("type", "jieba");
analyzerParams.put("dict", Collections.singletonList("_default_"));
analyzerParams.put("mode", "search");
analyzerParams.put("hmm", true);
// javascript
analyzerParams = map[string]any{"type": "jieba", "dict": []any{"_default_"}, "mode": "search", "hmm": true}
# restful

للحصول على تفاصيل حول المعلمات، راجع التكوين المخصص.

تكوين مخصص

لمزيد من التحكم، يمكنك توفير تكوين مخصص يسمح لك بتحديد قاموس مخصص، وتحديد وضع التجزئة، وتمكين أو تعطيل نموذج ماركوف المخفي (HMM). على سبيل المثال:

# Custom configuration with user-defined settings
analyzer_params = {
    "tokenizer": {
        "type": "jieba",           # Fixed tokenizer type
        "dict": ["customDictionary"],  # Custom dictionary list; replace with your own terms
        "mode": "exact",           # Use exact mode (non-overlapping tokens)
        "hmm": False               # Disable HMM; unmatched text will be split into individual characters
    }
}
Map<String, Object> analyzerParams = new HashMap<>();                                                                          
analyzerParams.put("tokenizer", new HashMap<String, Object>() {{
  put("type", "jieba");                                                                                                      
  put("dict", Arrays.asList("customDictionary"));             
  put("mode", "exact");
  put("hmm", false);
}});

// javascript
analyzerParams := map[string]interface{}{
  "tokenizer": map[string]interface{}{
      "type": "jieba",
      "dict": []string{"customDictionary"},
      "mode": "exact",
      "hmm":  false,
  },
}
# restful

المعلمة

الوصف

القيمة الافتراضية

type

نوع أداة الترميز. هذا ثابت على "jieba".

"jieba"

dict

قائمة القواميس التي سيقوم المحلل بتحميلها كمصدر للمفردات. خيارات مدمجة:

  • "_default_": يقوم بتحميل قاموس اللغة الصينية المبسطة المدمج في المحرك. لمزيد من التفاصيل، راجع dict.txt.

  • "_extend_default_": يقوم بتحميل كل شيء في "_default_" بالإضافة إلى ملحق إضافي للغة الصينية التقليدية. لمزيد من التفاصيل، راجع dict.txt.big.

    يمكنك أيضًا مزج القاموس المدمج مع أي عدد من القواميس المخصصة. مثال: ["_default_", "结巴分词器"].

["_default_"]

mode

وضع التجزئة. القيم الممكنة:

  • "exact": تحاول تجزئة الجملة بأكثر الطرق دقة، مما يجعلها مثالية لتحليل النص.

  • "search": يبني على الوضع الدقيق من خلال زيادة تقسيم الكلمات الطويلة لتحسين التذكر، مما يجعله مناسبًا لترميز محرك البحث.

    لمزيد من المعلومات، راجع مشروع Jieba GitHub Project.

"search"

hmm

علامة منطقية تشير إلى ما إذا كان يجب تمكين نموذج ماركوف المخفي (HMM) للتجزئة الاحتمالية للكلمات غير الموجودة في القاموس.

true

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

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

تكوين مخصص مع ملف قاموسCompatible with Milvus 3.0.x

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

الملف هو نص UTF-8 عادي مع مصطلح واحد لكل سطر. على سبيل المثال:

结巴分词器
向量数据库

قم بتحميل الملف إلى مخزن الكائنات الذي تم تكوين مجموعة ميلفوس لاستخدامه، ثم قم بتسجيله:

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

# Register the uploaded file under a name you'll reference from analyzer configs.
client.add_file_resource(
    name="zh_terms",
    path="file/zh_terms.txt",    # full S3 object key, including the rootPath prefix
)
// java
// nodejs
// go
# restful

قم بالإشارة إلى المورد المسجل في أداة الترميز عبر extra_dict_file:

analyzer_params = {
    "tokenizer": {
        "type": "jieba",
        "dict": ["_default_"],             # keep the built-in dictionary
        "mode": "exact",
        "hmm": False,
        "extra_dict_file": {
            "type": "remote",
            "resource_name": "zh_terms",
            "file_name": "zh_terms.txt",
        },
    },
}

client.run_analyzer(["milvus结巴分词器中文测试"], analyzer_params)
# → [['milvus', '结巴', '分词器', '中文', '测试']]
// java
// nodejs
// go
# restful

تقبل المعلمة extra_dict_file كائنًا يحتوي على الحقول التالية:

الحقل

الوصف

type

نوع المورد. استخدم "remote" لملف مسجل عبر add_file_resource. بالنسبة للمتغير "local" المستخدم في عمليات النشر المستضافة ذاتيًا، راجع إدارة موارد الملف.

resource_name

الاسم المستخدم عند تسجيل الملف على add_file_resource.

file_name

جزء اسم الملف من مسار مخزن الكائنات الخاص بالمورد المسجل (على سبيل المثال، "zh_terms.txt" إذا كان المورد مسجلاً مع path="file/zh_terms.txt").

تُدمج الكلمات المضافة عبر extra_dict_file مع القاموس المدمج، بحيث تراها خوارزمية التجزئة في جيبا إلى جانب الإدخالات الموجودة. ويعتمد ظهور أي مصطلح معين كرمز مستقل على اختيار DAG المرجح بالاحتمالات في جايبا - قد يتم تقسيم مصطلح مخصص طويل مثل 向量数据库 إلى 向量 + 数据库 إذا كانت تلك الإدخالات الأقصر ذات ترددات أعلى في القاموس المدمج.

أمثلة

قبل تطبيق تكوين المحلل على مخطط المجموعة الخاص بك، تحقق من سلوكه باستخدام الطريقة run_analyzer.

تكوين المحلّل

analyzer_params = {
    "tokenizer": {
        "type": "jieba",
        "dict": ["结巴分词器"],
        "mode": "exact",
        "hmm": False
    }
}
Map<String, Object> analyzerParams = new HashMap<>();                                                                          
analyzerParams.put("tokenizer", new HashMap<String, Object>() {{
  put("type", "jieba");                                                                                                      
  put("dict", Arrays.asList("结巴分词器"));                   
  put("mode", "exact");
  put("hmm", false);
}});
// javascript
analyzerParams := map[string]interface{}{
  "tokenizer": map[string]interface{}{
      "type": "jieba",
      "dict": []string{"结巴分词器"},
      "mode": "exact",
      "hmm":  false,
  },
}
# restful

التحقق باستخدام run_analyzer

from pymilvus import (
    MilvusClient,
)

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

# Sample text to analyze
sample_text = "milvus结巴分词器中文测试"

# Run the standard analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Standard analyzer output:", result)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.RunAnalyzerReq;
import io.milvus.v2.service.vector.response.RunAnalyzerResp;

ConnectConfig config = ConnectConfig.builder()
        .uri("http://localhost:19530")
        .token("root:Milvus")
        .build();
MilvusClientV2 client = new MilvusClientV2(config);

List<String> texts = new ArrayList<>();
texts.add("milvus结巴分词器中文测试");

RunAnalyzerResp resp = client.runAnalyzer(RunAnalyzerReq.builder()
        .texts(texts)
        .analyzerParams(analyzerParams)
        .build());
List<RunAnalyzerResp.AnalyzerResult> results = resp.getResults();
// javascript
import (
    "context"
    "encoding/json"
    "fmt"

    "github.com/milvus-io/milvus/client/v2/milvusclient"
)

client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
    Address: "localhost:19530",
    APIKey:  "root:Milvus",
})
if err != nil {
    fmt.Println(err.Error())
    // handle error
}

bs, _ := json.Marshal(analyzerParams)
texts := []string{"milvus结巴分词器中文测试"}
option := milvusclient.NewRunAnalyzerOption(texts).
    WithAnalyzerParams(string(bs))

result, err := client.RunAnalyzer(ctx, option)
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
# restful

المخرجات المتوقعة

['milvus', '结巴分词器', '中', '文', '测', '试']

ترجمة بواسطةDeepL

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

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