拼音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 | 布林值 | 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']