PinyinCompatible with Milvus 3.0.x

La búsqueda de texto en chino suele requerir que los usuarios introduzcan los caracteres chinos exactamente tal y como aparecen en el texto indexado. En los procesos de búsqueda de nombres, autocompletado y búsqueda mientras se escribe, los usuarios suelen escribir pinyin en lugar de caracteres chinos. Por ejemplo, un usuario puede escribir « zuqiu » para buscar « 足球 ». El filtro « pinyin » añade tokens de pinyin a la salida del analizador, de modo que el texto en chino pueda coincidir con la entrada en pinyin sin necesidad de mantener un campo de pinyin independiente.

El filtro « pinyin » se suele utilizar con el tokenizador Jieba para texto chino. Funciona en una cadena de filtros de un analizador personalizado y puede generar múltiples formas de tokens pinyin para un mismo token chino.

Configuración

Para utilizar las opciones predeterminadas, especifica « "pinyin" » en la sección « filter » de « analyzer_params ».

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["pinyin"],
}

Esta configuración abreviada conserva los tokens chinos originales y genera tokens pinyin a nivel de carácter. No genera pinyin unido ni iniciales pinyin a menos que se habiliten esas opciones explícitamente.

Para un control total, especifica el filtro como un objeto y configura los formatos de los tokens de pinyin que genera Milvus.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": [
        {
            "type": "pinyin",
            "keep_original": True,
            "keep_full_pinyin": True,
            "keep_joined_full_pinyin": False,
            "keep_separate_first_letter": False,
        }
    ],
}

El filtro admite los siguientes parámetros.

ParámetroTipoValor por defectoDescripción
keep_originalBooleanotrueMantiene el token chino original en la salida del analizador.
keep_full_pinyinBooleanotrueGenera tokens de pinyin a nivel de carácter. Por ejemplo, « 中文 » genera « zhong » y « wen ».
keep_joined_full_pinyinBooleanofalseGenera un token pinyin combinado por cada token de origen. Por ejemplo, « 中文 » genera « zhongwen ».
keep_separate_first_letterBooleanofalseGenera un token con las iniciales en pinyin para cada token de origen. Por ejemplo, 中文 genera zw.

El filtro actúa sobre los tokens generados por el tokenizador. Para texto en chino, utilízalo con un tokenizador como jieba.

Ejemplos

Antes de aplicar la configuración del analizador al esquema de su colección, compruebe su comportamiento con run_analyzer.

from pymilvus import MilvusClient

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

sample_text = "中文测试"

Hacer coincidir texto en chino con tokens de pinyin a nivel de carácter

El filtro predeterminado pinyin conserva los tokens chinos originales y genera tokens de pinyin a nivel de carácter.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["pinyin"],
}

result = client.run_analyzer(sample_text, analyzer_params)
print(result)

Resultado esperado:

['中文', 'zhong', 'wen', '测试', 'ce', 'shi']

Coincidir términos chinos con pinyin unido

Activa keep_joined_full_pinyin cuando necesites que un término chino coincida con su forma completa de pinyin unificado.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": [
        {
            "type": "pinyin",
            "keep_original": True,
            "keep_full_pinyin": False,
            "keep_joined_full_pinyin": True,
            "keep_separate_first_letter": False,
        }
    ],
}

result = client.run_analyzer(sample_text, analyzer_params)
print(result)

Resultado esperado:

['中文', 'zhongwen', '测试', 'ceshi']

Coincidir términos chinos con las iniciales del pinyin

Activa « keep_separate_first_letter » cuando necesites que un término chino coincida con las iniciales de su forma en pinyin.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": [
        {
            "type": "pinyin",
            "keep_original": True,
            "keep_full_pinyin": False,
            "keep_joined_full_pinyin": False,
            "keep_separate_first_letter": True,
        }
    ],
}

result = client.run_analyzer(sample_text, analyzer_params)
print(result)

Resultado esperado:

['中文', 'zw', '测试', 'cs']

Traducido porDeepL

Prueba Milvus gestionado gratis

Zilliz Cloud no da problemas, funciona con Milvus y es 10 veces más rápido.

Empezar
Feedback

¿Fue útil esta página?