メインコンテンツまでスキップ
バージョン: User Guides (BYOC)

Lindera

lindera トークナイザーは、辞書ベースの形態素解析を実行します。これは、単語がスペースで区切られず、助詞などの文法的要素が直接単語に付属する日本語や韓国語向けに設計されています。

📘Notes

中国語テキストの場合: linderacc-cedict 辞書を介して中国語をサポートしていますが、代わりにjieba トークナイザーの使用を推奨します。Jieba は中国語の単語分割に特化しており、より優れた結果を提供します。

概要

日本語と韓国語は膠着語です。つまり、「助詞」と呼ばれる文法的要素が名詞などに直接付属し、多数の組み合わせを形成します。例えば:

言語

Root word

  • Particle

= Combined form

Meaning

Korean

서울 (Seoul)

에서

서울에서

in Seoul

Japanese

東京 (Tokyo)

東京に

to Tokyo

lindera トークナイザーは以下の処理を行います:

  1. テキストを個々の形態素(単語や助詞)

  2. 各トークンに辞書から品詞(POS)

  3. 不要なトークン(例:助詞、句読点)

この「分割 → 品詞に基づくフィルタリング」という二段階の処理により、検索用にインデックスするトークンを正確に制御できます。

設定

lindera トークナイザーを使用するアナライザーを設定するには、tokenizer.typelindera に設定し、dict_kind で辞書を選択し、必要に応じてフィルターを適用します。

analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict_kind": "ko-dic",
"filter": [
{
"kind": "korean_stop_tags",
"tags": ["SP", "SSC", "SSO", "SC", "SE", "SF", "JKS", "JKC", "JKG", "JKO", "JKB", "JKV", "JKQ", "JX", "JC", "UNK", "EP", "ETM"]
}
]
}
}

パラメータ

説明

type

トークナイザーのタイプ。これは固定で "lindera" です。

dict_kind

語彙を定義するために使用される辞書。指定可能な値:

filter

セグメンテーション後に適用するトークナイザーレベルのフィルターのリスト。各フィルターは以下のプロパティを持つオブジェクトです:

  • kind: フィルターの種類。サポートされている値:

    • korean_stop_tags: 指定された韓国語の品詞タグに一致するトークンを削除します。

    • japanese_stop_tags: 指定された日本語の品詞タグに一致するトークンを削除します。

  • tags: フィルタリング対象となる品詞タグのリスト。kind によって利用可能なタグが異なります:

    • korean_stop_tags の場合: 正確なタグコードを使用します (例: JKS, JKO, SF)。韓国語のタグは完全一致が必要です。Sejong タグセットに基づく全タグ一覧については、Lindera Korean stop tags source を参照してください。

    • japanese_stop_tags の場合: 正確なタグコードを使用します (例: 助詞,格助詞, 助詞,係助詞, 助動詞)。日本語のタグは完全一致が必要です。全タグ一覧 (IPADIC) については、Japanese POS tags reference を参照してください。

analyzer_params を定義した後、コレクションスキーマを定義する際に VARCHAR 型フィールドに適用できます。これにより、Zilliz Cloud はそのフィールド内のテキストを指定されたアナライザーを使って処理し、効率的なトークン化とフィルタリングを実現します。詳細については、使用例 を参照してください。

コレクションスキーマにアナライザー設定を適用する前に、run_analyzer メソッドを使ってその動作を検証することを推奨します。

韓国語の例

from pymilvus import MilvusClient

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict_kind": "ko-dic",
"filter": [
{
"kind": "korean_stop_tags",
"tags": ["SP", "SSC", "SSO", "SC", "SE", "SF", "JKS", "JKC", "JKG", "JKO", "JKB", "JKV", "JKQ", "JX", "JC", "UNK", "EP", "ETM"]
}
]
}
}

# Sample Korean text: "서울에서 맛있는 음식을 먹었습니다" (I ate delicious food in Seoul)
sample_text = "서울에서 맛있는 음식을 먹었습니다"

result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

期待される出力:

['서울', '맛있', '음식', '먹', '습니다']

korean_stop_tags を使用しない場合、出力には「에서」(~で)、「는」(主題を示す助詞)、「을」(目的語を示す助詞)などの助詞が含まれますが、これらは通常検索において有用ではありません。

日本語の例

from pymilvus import MilvusClient

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict_kind": "ipadic",
"filter": [
{
"kind": "japanese_stop_tags",
"tags": ["接続詞", "助詞,格助詞", "助詞,格助詞,一般", "助詞,格助詞,引用", "助詞,格助詞,連語", "助詞,係助詞", "助詞,終助詞", "助詞,接続助詞", "助詞,特殊", "助詞,副助詞", "助詞,副助詞/並立助詞/終助詞", "助詞,連体化", "助詞,副詞化", "助詞,並立助詞", "助動詞", "記号,一般", "記号,読点", "記号,句点", "記号,空白", "記号,括弧閉", "記号,括弧開", "その他,間投", "フィラー", "非言語音"]
}
]
}
}

# Sample Japanese text: "東京スカイツリーの最寄り駅はとうきょうスカイツリー駅です"
sample_text = "東京スカイツリーの最寄り駅はとうきょうスカイツリー駅です"

result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

期待される出力:

['東京', 'スカイ', 'ツリー', '最寄り駅', 'とう', 'きょう', 'スカイ', 'ツリー', '駅']

japanese_stop_tags を使用しない場合、出力には「の」(所有を示す助詞)、「は」(主題を示す助詞)、「です」(コピュラ)などの助詞が含まれます。