Sinónimo

El filtro synonym reescribe los tokens de acuerdo con un diccionario de sinónimos, de forma que los términos relacionados coincidan durante la búsqueda. Admite dos modos de funcionamiento y dos formas de suministrar el diccionario:

  • Modos de funcionamiento - el modo expand conserva el token original y emite sinónimos adicionales junto a él; el modo de normalización (expand: false) reescribe los tokens a una forma canónica.

  • Fuentes del diccionario: los diccionarios pequeños pueden incluirse en la configuración del filtro a través de la matriz synonyms; los diccionarios grandes deben almacenarse como un recurso de archivo y referenciarse a través de synonyms_file.

Formato del diccionario

Un diccionario de sinónimos es un documento de texto sin formato (o matriz en línea) en el que cada línea define una regla. Se admiten dos formas de regla.

Regla de asignación

fast, quick => speedy

Los tokens de la izquierda (fast, quick) se reescriben en los tokens de la derecha (speedy). Se permiten varios objetivos:

small, little => tiny, compact

Con expand: true, los tokens originales se mantienen junto a los objetivos:

  • Entrada fast con expand: truefast, speedy

  • Entrada fast con expand: falsespeedy

Grupo de equivalencia

happy, joyful, cheerful

Todos los tokens de la lista se consideran equivalentes:

  • Con expand: true, cualquier aparición de cualquier token del grupo emite cada token del grupo. Entrada happyhappy, joyful, cheerful.

  • Con expand: false, cada ocurrencia se reescribe en el primer token del grupo. Entrada joyfulhappy; la entrada happy ya es el primer token y no se modifica.

Configuración

El filtro synonym es un filtro personalizado. Especifica "type": "synonym" junto con al menos uno de synonyms (en línea) o synonyms_file (externo), además de una bandera expand.

analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        {
            "type": "synonym",
            "synonyms": [                       # inline rules (optional)
                "fast, quick => speedy",
                "happy, joyful, cheerful",
            ],
            "synonyms_file": {                  # external rules (optional)
                "type": "remote",
                "resource_name": "en_synonyms",
                "file_name": "synonyms.txt",
            },
            "expand": True,
        }
    ],
}

El filtro synonym acepta los siguientes parámetros.

Parámetro

Descripción

Por defecto

synonyms

Una matriz en línea de cadenas de reglas. Cada cadena utiliza el formato de diccionario descrito anteriormente. Adecuado para diccionarios pequeños (hasta unas pocas docenas de reglas).

-

synonyms_file

Una referencia a un recurso de archivo que almacena reglas de sinónimos, una por línea. Utilícelo para diccionarios más grandes. Véase Archivo de diccionario externo más abajo.

-

expand

Un indicador booleano que controla cómo se aplican las reglas. true conserva el token original y emite sinónimos junto a él; false reescribe los tokens a su forma canónica (el lado derecho de una correspondencia, o el primer token de un grupo de equivalencia).

falso

Puede especificar synonyms, synonyms_file, o ambos. Si se especifican ambos, el filtro fusiona las dos fuentes. El filtro funciona con los tokens producidos por el tokenizador; por lo tanto, debe combinarse con un tokenizador como el tokenizador estándar.

Archivo de diccionario externo

Para diccionarios de tamaño de producción, registre el archivo como un recurso de archivo remoto y haga referencia a él desde synonyms_file.

from pymilvus import MilvusClient

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

# Register the file once, then reference it from any analyzer that needs it.
client.add_file_resource(
    name="en_synonyms",
    path="file/synonyms.txt",     # full S3 object key, including rootPath
)

analyzer_params = {
    "tokenizer": "standard",
    "filter": [{
        "type": "synonym",
        "synonyms_file": {
            "type": "remote",
            "resource_name": "en_synonyms",
            "file_name": "synonyms.txt",
        },
        "expand": True,
    }],
}

Consulte Gestionar recursos de archivos para ver el flujo de trabajo completo (cargar, registrar, listar, eliminar) y el formulario alternativo "type": "local".

Ejemplos

Antes de aplicar el analizador a un esquema de colección, verifique su comportamiento con run_analyzer. Los siguientes ejemplos utilizan la matriz en línea synonyms por brevedad; sustitúyala por synonyms_file para diccionarios más grandes.

expand: true - conservar el original, añadir sinónimos

from pymilvus import MilvusClient

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

analyzer_params = {
    "tokenizer": "standard",
    "filter": [{
        "type": "synonym",
        "synonyms": [
            "fast, quick => speedy",
            "happy, joyful, cheerful",
        ],
        "expand": True,
    }],
}

print(client.run_analyzer(["a fast car"], analyzer_params))
# → [['a', 'fast', 'speedy', 'car']]

print(client.run_analyzer(["i am happy today"], analyzer_params))
# → [['i', 'am', 'happy', 'joyful', 'cheerful', 'today']]

Tanto fast como happy se conservan; sus sinónimos se emiten junto a ellos.

expand: false - reescribir a forma canónica

analyzer_params_norm = {
    "tokenizer": "standard",
    "filter": [{
        "type": "synonym",
        "synonyms": [
            "fast, quick => speedy",
            "happy, joyful, cheerful",
        ],
        "expand": False,
    }],
}

print(client.run_analyzer(["a fast car"], analyzer_params_norm))
# → [['a', 'speedy', 'car']]

print(client.run_analyzer(["i am happy today"], analyzer_params_norm))
# → [['i', 'am', 'happy', 'today']]

La regla de asignación reescribe fast en speedy. El grupo de equivalencia deja happy sin cambios porque es el primer token del grupo; una entrada que contenga joyful o cheerful se habría reescrito en happy.