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

type

Der Typ des Tokenizers. Dieser ist auf "jieba" festgelegt.

"jieba"

dict

Eine Liste von Wörterbüchern, die der Analyzer als Vokabularquelle laden wird. Eingebaute Optionen:

  • "_default_": Lädt das eingebaute Wörterbuch der Engine für vereinfachtes Chinesisch. Details finden Sie in dict.txt.

  • "_extend_default_": Lädt alles, was in "_default_" steht, plus eine zusätzliche Ergänzung in traditionellem Chinesisch. Einzelheiten dazu finden Sie in dict.txt.big.

    Sie können auch das integrierte Wörterbuch mit einer beliebigen Anzahl von benutzerdefinierten Wörterbüchern mischen. Beispiel: ["_default_", "结巴分词器"].

["_default_"]

mode

Der Segmentierungsmodus. Mögliche Werte:

  • "exact": Versucht, den Satz so genau wie möglich zu segmentieren, was ideal für die Textanalyse ist.

  • "search": Baut auf dem exakten Modus auf, indem er lange Wörter weiter aufschlüsselt, um die Wiedererkennung zu verbessern, wodurch er sich für die Tokenisierung durch Suchmaschinen eignet.

    Weitere Informationen finden Sie im Jieba GitHub Projekt.

"search"

hmm

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.

true

Nachdem Sie analyzer_params definiert haben, können Sie sie bei der Definition eines Sammelschemas auf ein VARCHAR Feld anwenden. Dies ermöglicht Milvus die Verarbeitung des Textes in diesem Feld unter Verwendung des angegebenen Analysators für eine effiziente Tokenisierung und Filterung. Einzelheiten finden Sie unter Beispielanwendung.

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_analyzerCompatible with Milvus 2.5.11+

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', '结巴分词器', '中', '文', '测', '试']

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?