Decompositore

Il filtro decompounder suddivide le parole composte in singoli componenti sulla base di un dizionario specificato, facilitando la ricerca di parti di termini composti. Questo filtro è particolarmente utile per le lingue che usano frequentemente parole composte, come il tedesco. Il dizionario dei componenti può essere fornito in linea tramite il parametro word_list oppure caricato da una risorsa file registrata tramite il parametro word_list_file.

Configurazione

Il filtro decompounder accetta il suo dizionario dei componenti in linea tramite il parametro word_list o da una risorsa file registrata tramite il parametro word_list_file.

Elenco di parole in linea

Il filtro decompounder è un filtro personalizzato di Milvus. Per utilizzarlo, si deve specificare "type": "decompounder" nella configurazione del filtro, insieme a un parametro word_list che fornisce il dizionario dei componenti delle parole da riconoscere.

analyzer_params = {
    "tokenizer": "standard",
    "filter":[{
        "type": "decompounder", # Specifies the filter type as decompounder
        "word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"],
    }],
}
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"));
                }}
        )
);
const analyzer_params = {
    "tokenizer": "standard",
    "filter":[{
        "type": "decompounder", // Specifies the filter type as decompounder
        "word_list": ["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"},
    }}}
# restful
analyzerParams='{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "decompounder",
      "word_list": [
        "dampf",
        "schiff",
        "fahrt",
        "brot",
        "backen",
        "automat"
      ]
    }
  ]
}'

Il filtro decompounder accetta i seguenti parametri configurabili.

Parametro

Descrizione

word_list

Un elenco di componenti di parole utilizzate per dividere i termini composti. Questo dizionario determina il modo in cui le parole composte vengono scomposte in termini individuali.

Il filtro decompounder opera sui termini generati dal tokenizer, quindi deve essere usato in combinazione con un tokenizer. Per un elenco dei tokenizer disponibili in Milvus, fare riferimento a Standard Tokenizer e alle sue pagine collaterali.

Dopo aver definito analyzer_params, è possibile applicarlo a un campo VARCHAR quando si definisce uno schema di raccolta. Ciò consente a Milvus di elaborare il testo in quel campo usando l'analizzatore specificato per una tokenizzazione e un filtraggio efficienti. Per i dettagli, vedere Esempio di utilizzo.

Caricare i componenti delle parole da una risorsa fileCompatible with Milvus 3.0.x

Per i dizionari di componenti di grandi dimensioni, in particolare per gli elenchi di parole in tutte le lingue, è possibile memorizzare i componenti in un file e registrare il file come risorsa file remota, quindi fare riferimento ad esso dal filtro tramite il parametro word_list_file. Si può usare word_list_file da solo o insieme a word_list inline; quando entrambi sono impostati, il filtro fonde le due fonti in un unico elenco di componenti.

Il file è un testo semplice UTF-8 con una parola componente per riga. Ad esempio:

dampf
schiff
fahrt
brot
backen
automat

Caricare il file nell'archivio oggetti che il cluster Milvus è configurato per usare, quindi registrarlo:

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
)

Fare riferimento alla risorsa registrata nel filtro tramite word_list_file:

analyzer_params = {
    "tokenizer": "standard",
    "filter": [{
        "type": "decompounder",
        "word_list_file": {
            "type": "remote",
            "resource_name": "de_components",
            "file_name": "decompounder.txt",
        },
    }],
}

Il parametro word_list_file accetta un oggetto con i seguenti campi:

Campo

Descrizione

type

Il tipo di risorsa. Utilizzare "remote" per un file registrato tramite add_file_resource. Per la variante "local" utilizzata nelle distribuzioni self-hosted, fare riferimento a Gestire le risorse dei file.

resource_name

Il nome usato quando il file è stato registrato con add_file_resource.

file_name

La parte del nome del file del percorso del deposito di oggetti della risorsa registrata (ad esempio, "decompounder.txt" se la risorsa è stata registrata con path="file/decompounder.txt").

Esempi

Prima di applicare la configurazione dell'analizzatore allo schema di raccolta, verificarne il comportamento con il metodo run_analyzer.

Configurazione dell'analizzatore

analyzer_params = {
    "tokenizer": "standard",
    "filter":[{
        "type": "decompounder", # Specifies the filter type as decompounder
        "word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"],
    }],
}
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"));
                }}
        )
);
// javascript
analyzerParams = map[string]any{"tokenizer": "standard",
    "filter": []any{map[string]any{
        "type":       "decompounder",
        "word_list": []string{"dampf", "schiff", "fahrt", "brot", "backen", "automat"},
    }}}
# restful
analyzerParams='{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "decompounder",
      "word_list": [
        "dampf",
        "schiff",
        "fahrt",
        "brot",
        "backen",
        "automat"
      ]
    }
  ]
}'

Verifica con run_analyzer

from pymilvus import (
    MilvusClient,
)

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

# Sample text to analyze
sample_text = "dampfschifffahrt brotbackautomat"

# 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")
        .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();
// 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{"dampfschifffahrt brotbackautomat"}
option := milvusclient.NewRunAnalyzerOption(texts).
    WithAnalyzerParams(string(bs))

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

Risultato atteso

['dampf', 'schiff', 'fahrt', 'brotbackautomat']

Tradotto daDeepL

Prova Milvus gestito gratuitamente

Zilliz Cloud è senza problemi, basato su Milvus e 10 volte più veloce.

Inizia
Feedback

Questa pagina è stata utile?