Synonym
Der Filter synonym schreibt Token entsprechend einem Synonymwörterbuch um, so dass verwandte Begriffe bei der Suche übereinstimmen. Er unterstützt zwei Betriebsarten und zwei Arten der Bereitstellung des Wörterbuchs:
Betriebsarten - im Modus
expandwird das ursprüngliche Token beibehalten und es werden zusätzliche Synonyme daneben ausgegeben; im Normalisierungsmodus (expand: false) werden Token in eine kanonische Form umgeschrieben.Wörterbuchquellen - kleine Wörterbücher können über das Array
synonymsin die Filterkonfiguration eingefügt werden; große Wörterbücher sollten als Dateiressource gespeichert und übersynonyms_filereferenziert werden.
Format des Wörterbuchs
Ein Synonymwörterbuch ist ein Klartextdokument (oder ein Inline-Array), in dem jede Zeile eine Regel definiert. Es werden zwei Regelformen unterstützt.
Mapping-Regel
fast, quick => speedy
Die Token auf der linken Seite (fast, quick) werden auf die Token auf der rechten Seite (speedy) umgeschrieben. Mehrere Ziele sind erlaubt:
small, little => tiny, compact
Bei expand: true werden die ursprünglichen Zeichen neben den Zielen beibehalten:
Eingabe
fastmitexpand: true→fast,speedyEingabe
fastmitexpand: false→speedy
Äquivalenzgruppe
happy, joyful, cheerful
Alle aufgeführten Zeichen werden als gleichwertig betrachtet:
Mit
expand: truegibt jedes Vorkommen eines beliebigen Tokens in der Gruppe jedes Token in der Gruppe aus. Eingabehappy→happy,joyful,cheerful.Mit
expand: falsewird jedes Vorkommen auf das erste Token in der Gruppe umgeschrieben. Eingabejoyful→happy; die Eingabehappyist bereits das erste Token und bleibt unverändert.
Konfiguration
Der Filter synonym ist ein benutzerdefinierter Filter. Geben Sie "type": "synonym" zusammen mit mindestens einem von synonyms (inline) oder synonyms_file (extern) sowie einem expand Flag an.
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,
}
],
}
Der Filter synonym akzeptiert die folgenden Parameter.
Parameter |
Beschreibung |
Voreinstellung |
|---|---|---|
|
Ein Inline-Array von Regelzeichenketten. Jede Zeichenkette verwendet das oben beschriebene Wörterbuchformat. Geeignet für kleine Wörterbücher (bis zu ein paar Dutzend Regeln). |
- |
|
Ein Verweis auf eine Dateiressource, die Synonymregeln speichert, eine pro Zeile. Für größere Wörterbücher zu verwenden. Siehe Externe Wörterbuchdatei unten. |
- |
|
Ein boolesches Flag, das steuert, wie die Regeln angewendet werden. true bewahrt das ursprüngliche Token und gibt daneben Synonyme aus; false schreibt Token in ihre kanonische Form um (die rechte Seite einer Abbildung oder das erste Token einer Äquivalenzgruppe). |
false |
Sie können synonyms, synonyms_file, oder beides angeben. Wenn beides vorhanden ist, führt der Filter die beiden Quellen zusammen. Der Filter arbeitet mit Token, die vom Tokenizer erzeugt werden; er muss daher mit einem Tokenizer wie dem Standard-Tokenizer kombiniert werden.
Externe Wörterbuchdatei
Für Wörterbücher in Produktionsgröße registrieren Sie die Datei als externe Dateiressource und referenzieren sie von synonyms_file aus.
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,
}],
}
Unter Dateiressourcen verwalten finden Sie den vollständigen Arbeitsablauf (Hochladen, Registrieren, Auflisten, Entfernen) und das alternative Formular "type": "local".
Beispiele
Bevor Sie den Analyzer auf ein Auflistungsschema anwenden, überprüfen Sie sein Verhalten mit run_analyzer. Die folgenden Beispiele verwenden der Kürze halber das Inline-Array synonyms; für größere Wörterbücher ersetzen Sie es durch synonyms_file.
expand: true - das Original beibehalten, Synonyme hinzufügen
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']]
Sowohl fast als auch happy werden beibehalten; ihre Synonyme werden daneben ausgegeben.
expand: false - Umschreiben in kanonische Form
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']]
Die Zuordnungsregel schreibt fast in speedy um. Die Äquivalenzgruppe lässt happy unverändert, da es das erste Token der Gruppe ist; eine Eingabe, die joyful oder cheerful enthält, wäre in happy umgeschrieben worden.