ピンインCompatible with Milvus 3.0.x
中国語テキストの検索では、ユーザーがインデックス化されたテキストに表示されているとおりに漢字を正確に入力する必要があることがよくあります。名前検索、オートコンプリート、および入力と同時に検索が行われるワークフローでは、ユーザーは漢字の代わりにピンインを入力することがよくあります。 たとえば、ユーザーが「zuqiu 」と入力して「足球 」を検索する場合があります。「pinyin 」フィルターは、アナライザーの出力にピンイントークンを追加するため、別途ピンインフィールドを維持することなく、中国語テキストとピンイン入力の照合が可能になります。
「pinyin 」フィルターは、通常、中国語テキスト用のJiebaトークナイザーと組み合わせて使用されます。これはカスタムアナライザーフィルターパイプライン内で動作し、同じ中国語トークンに対して複数のピンイントークン形式を出力することができます。
設定
デフォルトのオプションを使用するには、analyzer_params のfilter セクションで"pinyin" を指定します。
analyzer_params = {
"tokenizer": "jieba",
"filter": ["pinyin"],
}
この簡略表記では、元の中国語トークンが保持され、文字レベルのピンイントークンが出力されます。これらのオプションを明示的に有効にしない限り、連結ピンインやピンインの頭文字は出力されません。
完全に制御するには、フィルターをオブジェクトとして指定し、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,
}
],
}
このフィルターは、以下のパラメータを受け付けます。
| パラメータ | タイプ | デフォルト | 説明 |
|---|---|---|---|
keep_original | ブール値 | true | アナライザの出力に元の中国語トークンを保持します。 |
keep_full_pinyin | ブール値 | true | 文字レベルのピンイントークンを出力します。たとえば、中文 は、zhong およびwen を生成します。 |
keep_joined_full_pinyin | ブール値 | false | 各ソーストークンに対して、結合されたピンイントークンを出力します。たとえば、中文 の場合、zhongwen が出力されます。 |
keep_separate_first_letter | ブール値ソーストークンごとに、結合されたピンイントークンを出力します。たとえば、xml-ph-0000@deepl.internal は xml-ph-0001@deepl.internal を出力します。 | false | 各ソーストークンに対して、ピンインの頭文字トークンを出力します。たとえば、中文 はzw を生成します。 |
このフィルターは、トークナイザーによって生成されたトークンを処理します。中国語のテキストの場合は、jieba などのトークナイザーと組み合わせて使用してください。
例
アナライザーの設定をコレクションスキーマに適用する前に、run_analyzer を使用してその動作を確認してください。
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
sample_text = "中文测试"
中国語のテキストを文字レベルのピンインと照合する
デフォルトのpinyin フィルターは、元の中国語トークンを保持し、文字単位のピンイントークンを出力します。
analyzer_params = {
"tokenizer": "jieba",
"filter": ["pinyin"],
}
result = client.run_analyzer(sample_text, analyzer_params)
print(result)
期待される出力:
['中文', 'zhong', 'wen', '测试', 'ce', 'shi']
中国語の用語と結合されたピンインを照合する
中国語の用語を、その完全な結合ピンイン形式と照合する必要がある場合は、keep_joined_full_pinyin を有効にしてください。
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)
期待される出力:
['中文', 'zhongwen', '测试', 'ceshi']
中国語の用語とピンインの頭文字を照合する
中国語の用語を、そのピンイン表記の頭文字と照合する必要がある場合は、「keep_separate_first_letter 」を有効にしてください。
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)
期待される出力:
['中文', 'zw', '测试', 'cs']