PinyinCompatible with Milvus 3.0.x
Bei der Suche nach chinesischen Texten müssen Nutzer chinesische Schriftzeichen oft genau so eingeben, wie sie im indizierten Text vorkommen. Bei der Namenssuche, der Autovervollständigung und der Suche während der Eingabe geben Nutzer häufig Pinyin anstelle von chinesischen Schriftzeichen ein. Beispielsweise könnte ein Benutzer „ zuqiu “ eingeben, um nach „ 足球 “ zu suchen. Der Filter „ pinyin “ fügt der Ausgabe des Analysators Pinyin-Token hinzu, sodass chinesischer Text mit der Pinyin-Eingabe abgeglichen werden kann, ohne dass ein separates Pinyin-Feld gepflegt werden muss.
Der Filter „ pinyin “ wird in der Regel zusammen mit dem Jieba-Tokenizer für chinesischen Text verwendet. Er funktioniert in einer benutzerdefinierten Analysator-Filter-Pipeline und kann mehrere Pinyin-Tokenformen für dasselbe chinesische Token ausgeben.
Konfiguration
Um die Standardoptionen zu verwenden, geben Sie „ "pinyin" “ im Abschnitt „ filter “ der Datei „ analyzer_params “ an.
analyzer_params = {
"tokenizer": "jieba",
"filter": ["pinyin"],
}
Diese Kurzform behält die ursprünglichen chinesischen Token bei und gibt Pinyin-Token auf Zeichenebene aus. Es werden keine verbundenen Pinyin-Formen oder Pinyin-Initialen ausgegeben, es sei denn, Sie aktivieren diese Optionen ausdrücklich.
Um die volle Kontrolle zu haben, geben Sie den Filter als Objekt an und konfigurieren Sie die von Milvus ausgegebenen Pinyin-Token-Formen.
analyzer_params = {
"tokenizer": "jieba",
"filter": [
{
"type": "pinyin",
"keep_original": True,
"keep_full_pinyin": True,
"keep_joined_full_pinyin": False,
"keep_separate_first_letter": False,
}
],
}
Der Filter akzeptiert die folgenden Parameter.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
keep_original | Boolescher Wert | true | Behält das ursprüngliche chinesische Token in der Ausgabe des Analysators bei. |
keep_full_pinyin | Boolescher Wert | true | Gibt Pinyin-Token auf Zeichenebene aus. Beispielsweise erzeugt „ 中文 “ die Ausgabewerte „ zhong “ und „ wen “. |
keep_joined_full_pinyin | Boolescher Wert | false | Gibt für jedes Quell-Token ein zusammengefügtes Pinyin-Token aus. Beispielsweise erzeugt „ 中文 “ das Pinyin-Token „ zhongwen “. |
keep_separate_first_letter | Boolescher Wert | false | Gibt für jedes Quell-Token ein Pinyin-Initialen-Token aus. Beispielsweise erzeugt 中文 das Ergebnis zw. |
Der Filter wird auf die vom Tokenizer erzeugten Token angewendet. Verwenden Sie ihn für chinesischen Text zusammen mit einem Tokenizer wie jieba.
Beispiele
Bevor Sie die Analyzer-Konfiguration auf Ihr Sammlungsschema anwenden, überprüfen Sie deren Verhalten mit run_analyzer.
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
sample_text = "中文测试"
Chinesischen Text mit Pinyin auf Zeichenebene abgleichen
Der Standardfilter „ pinyin “ behält die ursprünglichen chinesischen Token bei und gibt Pinyin-Token auf Zeichenebene aus.
analyzer_params = {
"tokenizer": "jieba",
"filter": ["pinyin"],
}
result = client.run_analyzer(sample_text, analyzer_params)
print(result)
Erwartete Ausgabe:
['中文', 'zhong', 'wen', '测试', 'ce', 'shi']
Chinesische Begriffe mit zusammengefügter Pinyin-Schreibweise abgleichen
Aktivieren Sie „ keep_joined_full_pinyin “, wenn ein chinesischer Begriff mit seiner vollständigen, zusammengefügten Pinyin-Form abgeglichen werden soll.
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)
Erwartete Ausgabe:
['中文', 'zhongwen', '测试', 'ceshi']
Chinesische Begriffe mit Pinyin-Initialen abgleichen
Aktivieren Sie „ keep_separate_first_letter “, wenn ein chinesischer Begriff mit den Anfangsbuchstaben seiner Pinyin-Schreibweise abgeglichen werden soll.
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)
Erwartete Ausgabe:
['中文', 'zw', '测试', 'cs']