メインコンテンツまでスキップ

Pinyin

中国語のテキスト検索では、多くの場合、インデックス付きテキストに表示される中国語文字をそのまま入力する必要があります。名前検索、オートコンプリート、入力しながら検索するワークフローでは、ユーザーは中国語文字ではなく Pinyin を入力することがよくあります。たとえば、ユーザーは zuqiu と入力して 足球 を検索できます。pinyin フィルターはアナライザーの出力に Pinyin トークンを追加するため、別個の Pinyin フィールドを維持しなくても、中国語テキストを Pinyin 入力に一致させることができます。

pinyin フィルターは通常、中国語テキスト用の Jieba トークナイザーと組み合わせて使用します。カスタムアナライザーのフィルターパイプラインで動作し、同じ中国語トークンに対して複数の Pinyin トークン形式を出力できます。

設定​

デフォルトオプションを使用するには、analyzer_params の filter セクションに "pinyin" を指定します。

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

この省略形では、元の中国語トークンを保持し、文字単位の Pinyin トークンを出力します。結合 Pinyin や Pinyin の頭文字は、それらのオプションを明示的に有効にしない限り出力されません。

詳細に制御するには、フィルターをオブジェクトとして指定し、Zilliz Cloud が出力する Pinyin トークン形式を設定します。

python
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_originalBooleantrueアナライザーの出力に元の中国語トークンを保持します。
keep_full_pinyinBooleantrue文字単位の Pinyin トークンを出力します。たとえば、中文 から zhong と wen が生成されます。
keep_joined_full_pinyinBooleanfalseソーストークンごとに結合 Pinyin トークンを出力します。たとえば、中文 から zhongwen が生成されます。
keep_separate_first_letterBooleanfalseソーストークンごとに Pinyin の頭文字トークンを出力します。たとえば、中文 から zw が生成されます。

このフィルターは、トークナイザーによって生成されたトークンを処理します。中国語テキストには、jieba などのトークナイザーと組み合わせて使用します。

例​

アナライザー設定をコレクションスキーマに適用する前に、run_analyzer を使用してその動作を確認してください。

python
from pymilvus import MilvusClient

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

sample_text = "中文测试"

文字単位の Pinyin で中国語テキストを照合する​

デフォルトの pinyin フィルターは、元の中国語トークンを保持し、文字単位の Pinyin トークンを出力します。

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

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

期待される出力:

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

結合 Pinyin で中国語の語句を照合する​

中国語の語句を、その完全な結合 Pinyin 形式に一致させる必要がある場合は、keep_joined_full_pinyin を有効にします。

python
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)

期待される出力:

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

Pinyin の頭文字で中国語の語句を照合する​

中国語の語句を、その Pinyin 形式の頭文字に一致させる必要がある場合は、keep_separate_first_letter を有効にします。

python
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)

期待される出力:

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