Jieba
Der jieba Tokenizer verarbeitet chinesischen Text, indem er ihn in seine Wortbestandteile zerlegt.
Der Tokenisierer jieba behält Satzzeichen als separate Token in der Ausgabe bei. Zum Beispiel wird "你好!世界。" zu ["你好", "!", "世界", "。"]. Um diese eigenständigen Interpunktionszeichen zu entfernen, verwenden Sie den removepunct Filter.
Konfiguration
Milvus unterstützt zwei Konfigurationsansätze für den jieba Tokenizer: eine einfache Konfiguration und eine benutzerdefinierte Konfiguration.
Einfache Konfiguration
Bei der einfachen Konfiguration müssen Sie den Tokenizer nur auf "jieba" setzen. Zum Beispiel:
# 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"
}'
Diese einfache Konfiguration ist äquivalent zu der folgenden benutzerdefinierten Konfiguration:
# 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
Einzelheiten zu den Parametern finden Sie unter Benutzerdefinierte Konfiguration.
Benutzerdefinierte Konfiguration
Um mehr Kontrolle zu haben, können Sie eine benutzerdefinierte Konfiguration bereitstellen, mit der Sie ein benutzerdefiniertes Wörterbuch angeben, den Segmentierungsmodus auswählen und das Hidden Markov Model (HMM) aktivieren oder deaktivieren können. Zum Beispiel:
# 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
Parameter |
Beschreibung |
Standardwert |
|---|---|---|
|
Der Typ des Tokenizers. Dieser ist auf |
|
|
Eine Liste von Wörterbüchern, die der Analyzer als Vokabularquelle laden wird. Eingebaute Optionen:
|
|
|
Der Segmentierungsmodus. Mögliche Werte:
|
|
|
Ein boolesches Flag, das angibt, ob das Hidden Markov Model (HMM) für die probabilistische Segmentierung von Wörtern, die nicht im Wörterbuch enthalten sind, aktiviert werden soll. |
|
Um ein großes benutzerdefiniertes Vokabular aus einer externen Datei zu laden, anstatt es über dict einzubinden, siehe Benutzerdefinierte Konfiguration mit einer Wörterbuchdatei unten.
Nachdem Sie analyzer_params definiert haben, können Sie sie bei der Definition eines Sammelschemas auf ein VARCHAR Feld anwenden. Dies ermöglicht es Milvus, den Text in diesem Feld mit dem angegebenen Analysator zu verarbeiten, um eine effiziente Tokenisierung und Filterung zu erreichen. Details finden Sie unter Beispielanwendung.
Benutzerdefinierte Konfiguration mit einer WörterbuchdateiCompatible with Milvus 3.0.x
Für große benutzerdefinierte Vokabulare - Domänenglossare, Produktterminologie oder Listen von Eigennamen - speichern Sie die Wörter in einer Datei und registrieren Sie die Datei als Remote-Dateiressource, um sie dann vom Tokenizer über den Parameter extra_dict_file zu referenzieren. Der Analyzer lädt diese Wörter in sein Vokabular zusätzlich zum integrierten Wörterbuch.
Die Datei ist ein einfacher UTF-8-Text mit einem Begriff pro Zeile. Ein Beispiel:
结巴分词器
向量数据库
Laden Sie die Datei in den Objektspeicher hoch, für den Ihr Milvus-Cluster konfiguriert ist, und registrieren Sie sie dann:
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
Verweisen Sie auf die registrierte Ressource im Tokenizer über 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
Der Parameter extra_dict_file nimmt ein Objekt mit den folgenden Feldern an:
Feld |
Beschreibung |
|---|---|
|
Der Ressourcentyp. Verwenden Sie |
|
Der Name, der verwendet wurde, als die Datei mit |
|
Der Teil des Dateinamens des Objektspeicherpfads der registrierten Ressource (z. B. |
Wörter, die über extra_dict_file hinzugefügt werden, werden mit dem eingebauten Wörterbuch zusammengeführt, so dass der jieba-Segmentierungsalgorithmus sie neben bestehenden Einträgen sieht. Ob ein bestimmter Begriff als eigenständiges Token auftaucht, hängt von der wahrscheinlichkeitsgewichteten DAG-Auswahl von jieba ab - ein langer benutzerdefinierter Begriff wie 向量数据库 kann immer noch in 向量 + 数据库 aufgeteilt werden, wenn diese kürzeren Einträge eine höhere Häufigkeit im eingebauten Wörterbuch haben.
Beispiele
Bevor Sie die Analyzer-Konfiguration auf Ihr Sammelschema anwenden, überprüfen Sie das Verhalten mit der Methode run_analyzer.
Analyzer-Konfiguration
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
Überprüfung mit 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
Erwartete Ausgabe
['milvus', '结巴分词器', '中', '文', '测', '试']