جيبا
تقوم أداة الترميز 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
المعلمة |
الوصف |
القيمة الافتراضية |
|---|---|---|
|
نوع أداة الترميز. هذا ثابت على |
|
|
قائمة القواميس التي سيقوم المحلل بتحميلها كمصدر للمفردات. خيارات مدمجة:
|
|
|
وضع التجزئة. القيم الممكنة:
|
|
|
علامة منطقية تشير إلى ما إذا كان يجب تمكين نموذج ماركوف المخفي (HMM) للتجزئة الاحتمالية للكلمات غير الموجودة في القاموس. |
|
لتحميل مفردات مخصصة كبيرة من ملف خارجي بدلًا من تسطيرها عبر 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 كائنًا يحتوي على الحقول التالية:
الحقل |
الوصف |
|---|---|
|
نوع المورد. استخدم |
|
الاسم المستخدم عند تسجيل الملف على |
|
جزء اسم الملف من مسار مخزن الكائنات الخاص بالمورد المسجل (على سبيل المثال، |
تُدمج الكلمات المضافة عبر 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', '结巴分词器', '中', '文', '测', '试']