Pemisah Kata Majemuk
Filter " decompounder " memisahkan kata majemuk menjadi komponen-komponen individual berdasarkan kamus yang ditentukan, sehingga memudahkan pencarian bagian-bagian dari istilah majemuk. Filter ini sangat berguna untuk bahasa yang sering menggunakan kata majemuk, seperti bahasa Jerman.
Kamus komponen dapat disediakan secara langsung melalui parameter ` word_list ` atau dimuat dari sumber berkas yang terdaftar melalui parameter ` word_list_file `.
Konfigurasi
Filter ` decompounder ` menerima kamus komponennya baik secara langsung melalui parameter ` word_list ` maupun dari sumber berkas yang terdaftar melalui parameter ` word_list_file `.
Daftar kata secara langsung
Filter ` decompounder ` adalah filter khusus di Milvus. Untuk menggunakannya, tentukan ` "type": "decompounder" ` dalam konfigurasi filter, bersama dengan parameter ` word_list ` yang menyediakan kamus komponen kata yang akan dikenali.
analyzer_params = {
"tokenizer": "standard",
"filter":[{
"type": "decompounder", # Specifies the filter type as decompounder
"word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"],
}],
}
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("tokenizer", "standard");
analyzerParams.put("filter",
Collections.singletonList(
new HashMap<String, Object>() {{
put("type", "decompounder");
put("word_list", Arrays.asList("dampf", "schiff", "fahrt", "brot", "backen", "automat"));
}}
)
);
analyzerParams := map[string]any{"tokenizer": "standard",
"filter": []any{map[string]any{
"type": "decompounder",
"word_list": []string{"dampf", "schiff", "fahrt", "brot", "backen", "automat"},
}}}
let analyzer_params = serde_json::json!({
"tokenizer": "standard",
"filter": [{
"type": "decompounder",
"word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"]
}]
});
nlohmann::json analyzer_params = {
{"tokenizer", "standard"},
{"filter", {
{
{"type", "decompounder"},
{"word_list", {"dampf", "schiff", "fahrt", "brot", "backen", "automat"}}
}
}}
};
const analyzer_params = {
"tokenizer": "standard",
"filter":[{
"type": "decompounder", // Specifies the filter type as decompounder
"word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"],
}],
};
using System.Collections.Generic;
var analyzerParams = new Dictionary<string, object>
{
["tokenizer"] = "standard",
["filter"] = new object[]
{
new Dictionary<string, object>
{
["type"] = "decompounder", // Specifies the filter type as decompounder
["word_list"] = new[] { "dampf", "schiff", "fahrt", "brot", "backen", "automat" }
}
}
};
# restful
analyzerParams='{
"tokenizer": "standard",
"filter": [
{
"type": "decompounder",
"word_list": [
"dampf",
"schiff",
"fahrt",
"brot",
"backen",
"automat"
]
}
]
}'
Filter ` decompounder ` menerima parameter-parameter yang dapat dikonfigurasi berikut ini.
Parameter |
Deskripsi |
|---|---|
|
Daftar komponen kata yang digunakan untuk memisahkan istilah majemuk. Kamus ini menentukan bagaimana kata majemuk diuraikan menjadi istilah-istilah individual. |
Filter ` decompounder ` beroperasi pada istilah yang dihasilkan oleh tokenizer, sehingga harus digunakan bersama dengan tokenizer. Untuk daftar tokenizer yang tersedia di Milvus, lihat halaman `Standard Tokenizer ` dan halaman terkait lainnya.
Setelah mendefinisikan " analyzer_params", Anda dapat menerapkannya ke bidang " VARCHAR " saat mendefinisikan skema koleksi. Hal ini memungkinkan Milvus memproses teks di bidang tersebut menggunakan penganalisis yang ditentukan untuk tokenisasi dan penyaringan yang efisien. Untuk detailnya, lihat Contoh Penggunaan.
Memuat komponen kata dari sumber daya berkasCompatible with Milvus 3.0.x
Untuk kamus komponen yang besar — terutama daftar kata dalam bahasa lengkap — simpan komponen-komponen tersebut dalam berkas dan daftarkan berkas tersebut sebagai sumber daya berkas jarak jauh, lalu rujuk berkas tersebut dari filter melalui parameter ` word_list_file `. Anda dapat menggunakan ` word_list_file ` secara mandiri atau bersama dengan ` word_list` yang disematkan; ketika keduanya ditetapkan, filter akan menggabungkan kedua sumber tersebut menjadi satu daftar komponen.
Berkas tersebut berupa teks UTF‑8 biasa dengan satu kata komponen per baris. Contohnya:
dampf
schiff
fahrt
brot
backen
automat
Unggah berkas tersebut ke penyimpanan objek yang dikonfigurasi untuk digunakan oleh kluster Milvus Anda, lalu daftarkan berkas tersebut:
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="de_components",
path="file/decompounder.txt", # full S3 object key, including the rootPath prefix
)
Referensikan sumber daya yang telah terdaftar dalam filter melalui ` word_list_file`:
analyzer_params = {
"tokenizer": "standard",
"filter": [{
"type": "decompounder",
"word_list_file": {
"type": "remote",
"resource_name": "de_components",
"file_name": "decompounder.txt",
},
}],
}
Parameter ` word_list_file ` menerima objek dengan bidang-bidang berikut:
Bidang |
Deskripsi |
|---|---|
|
Jenis sumber daya. Gunakan ` |
|
Nama yang digunakan saat berkas didaftarkan di |
|
Bagian nama berkas dari jalur penyimpanan objek sumber daya yang terdaftar (misalnya, |
Contoh
Sebelum menerapkan konfigurasi penganalisis ke skema koleksi Anda, verifikasi perilakunya menggunakan metode run_analyzer.
Konfigurasi penganalisis
analyzer_params = {
"tokenizer": "standard",
"filter":[{
"type": "decompounder", # Specifies the filter type as decompounder
"word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"],
}],
}
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("tokenizer", "standard");
analyzerParams.put("filter",
Collections.singletonList(
new HashMap<String, Object>() {{
put("type", "decompounder");
put("word_list", Arrays.asList("dampf", "schiff", "fahrt", "brot", "backen", "automat"));
}}
)
);
analyzerParams := map[string]any{"tokenizer": "standard",
"filter": []any{map[string]any{
"type": "decompounder",
"word_list": []string{"dampf", "schiff", "fahrt", "brot", "backen", "automat"},
}}}
let analyzer_params = serde_json::json!({
"tokenizer": "standard",
"filter": [{
"type": "decompounder",
"word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"]
}]
});
nlohmann::json analyzer_params = {
{"tokenizer", "standard"},
{"filter", {
{
{"type", "decompounder"},
{"word_list", {"dampf", "schiff", "fahrt", "brot", "backen", "automat"}}
}
}}
};
const analyzer_params = {
"tokenizer": "standard",
"filter":[{
"type": "decompounder", // Specifies the filter type as decompounder
"word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"],
}],
};
using System.Collections.Generic;
var analyzerParams = new Dictionary<string, object>
{
["tokenizer"] = "standard",
["filter"] = new object[]
{
new Dictionary<string, object>
{
["type"] = "decompounder", // Specifies the filter type as decompounder
["word_list"] = new[] { "dampf", "schiff", "fahrt", "brot", "backen", "automat" }
}
}
};
# restful
analyzerParams='{
"tokenizer": "standard",
"filter": [
{
"type": "decompounder",
"word_list": [
"dampf",
"schiff",
"fahrt",
"brot",
"backen",
"automat"
]
}
]
}'
Verifikasi menggunakan run_analyzer
from pymilvus import (
MilvusClient,
)
client = MilvusClient(uri="http://localhost:19530", token="root:Milvus")
# Sample text to analyze
sample_text = "dampfschifffahrt brotbackautomat"
# Run the analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("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;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
ConnectConfig config = ConnectConfig.builder()
.uri("http://localhost:19530")
.token("root:Milvus")
.build();
MilvusClientV2 client = new MilvusClientV2(config);
List<String> texts = new ArrayList<>();
texts.add("dampfschifffahrt brotbackautomat");
RunAnalyzerResp resp = client.runAnalyzer(RunAnalyzerReq.builder()
.texts(texts)
.analyzerParams(analyzerParams)
.build());
List<RunAnalyzerResp.AnalyzerResult> results = resp.getResults();
import (
"context"
"encoding/json"
"fmt"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
ctx := context.Background()
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "http://localhost:19530",
APIKey: "root:Milvus",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
bs, _ := json.Marshal(analyzerParams)
texts := []string{"dampfschifffahrt brotbackautomat"}
option := milvusclient.NewRunAnalyzerOption(texts...).
WithAnalyzerParamsStr(string(bs))
result, err := client.RunAnalyzer(ctx, option)
if err != nil {
fmt.Println(err.Error())
// handle error
}
fmt.Println(result)
use milvus::v2::error::Result;
use milvus::v2::prelude::*;
use serde_json::json;
let config = ConnectConfig::new().uri("http://localhost:19530").token("root:Milvus");
let client = ClientV2::new(&config).await?;
let analyzer_params = json!({
"tokenizer": "standard",
"filter": [{
"type": "decompounder",
"word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"]
}]
});
let result = client.run_analyzer(
RunAnalyzerRequest::builder()
.texts(["dampfschifffahrt brotbackautomat".to_string()])
.analyzer_params(analyzer_params)
.build()?,
).await?;
println!("{:?}", result.results());
#include "milvus/MilvusClientV2.h"
#include <iostream>
#include <string>
auto client = milvus::MilvusClientV2::Create();
milvus::ConnectParam connect_param{"http://localhost:19530", "root:Milvus"};
auto status = client->Connect(connect_param);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
std::string text = "dampfschifffahrt brotbackautomat";
auto request = milvus::RunAnalyzerRequest()
.AddText(text)
.WithAnalyzerParams(analyzer_params);
milvus::RunAnalyzerResponse response;
status = client->RunAnalyzer(request, response);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
for (const auto& result : response.Results()) {
for (const auto& token : result.Tokens()) {
std::cout << token.token_ << " ";
}
std::cout << std::endl;
}
import { MilvusClient } from '@zilliz/milvus2-sdk-node';
const client = new MilvusClient({
address: 'http://localhost:19530',
token: 'root:Milvus'
});
const res = await client.runAnalyzer({
text: 'dampfschifffahrt brotbackautomat',
analyzer_params: analyzer_params
});
console.log(res);
using Milvus.Client.V2;
using Milvus.Client.V2.Requests.Utility;
using Milvus.Client.V2.Types;
using var client = new MilvusClientV2(new ConnectConfig { Uri = "http://localhost:19530", ApiKey = "root:Milvus" });
await client.ConnectAsync();
// Sample text to analyze
var sampleText = "dampfschifffahrt brotbackautomat";
var result = await client.RunAnalyzerAsync(new RunAnalyzerReq
{
AnalyzerParams = analyzerParams,
Texts = new[] { sampleText }
});
foreach (var r in result.Results)
{
Console.WriteLine("Analyzer output: " + string.Join(", ", r.Tokens.Select(t => t.Token)));
}
# restful
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/common/run_analyzer" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--data '{
"analyzerParams": "{\"tokenizer\":\"standard\",\"filter\":[{\"type\":\"decompounder\",\"word_list\":[\"dampf\",\"schiff\",\"fahrt\",\"brot\",\"backen\",\"automat\"]}]}",
"text": ["dampfschifffahrt brotbackautomat"]
}'
Hasil yang diharapkan
['dampf', 'schiff', 'fahrt', 'brotbackautomat']