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

Lindera

lindera トークナイザーは辞書ベースの形態素解析を行います。日本語と韓国語向けに設計されています。これらの言語では単語がスペースで区切られず、文法標識(助詞)が単語に直接付加されます。

📘Notes

中国語テキストの場合:lindera は cc-cedict 辞書を通じて中国語をサポートしていますが、代わりに jieba トークナイザーの使用をお勧めします。Jieba は中国語の単語分割用に特別に設計されており、より優れた結果を提供します。

概要​

日本語と韓国語は膠着語です。助詞と呼ばれる文法標識が名詞に直接付加され、多数の組み合わせを形成します。例:

言語

語根

+ 助詞

= 結合形

意味

韓国語

서울(ソウル)

에서

서울에서

ソウルで

日本語

東京(Tokyo)

に

東京に

東京へ

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

  1. テキストを分割し、個々の形態素(単語と助詞)にします。

  2. 各トークンにタグを付け、辞書から品詞(POS)情報を付与します。

  3. フィルターを適用し、不要なトークン(助詞や句読点など)を削除します。

この 2 段階のプロセス(分割後、品詞に基づくフィルタリング)により、検索用にインデックスするトークンを正確に制御できます。

設定​

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

python
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

語彙を定義するために使用する辞書です。使用可能な値は次のとおりです:

  • ko-dic: 韓国語 - 韓国語の形態素辞書(MeCab Ko-dic)

  • ipadic: 日本語 - 標準形態素辞書(MeCab IPADIC)

  • ipadic-neologd: 新語辞書付きの日本語(拡張) - 新語と固有名詞を含みます(IPADIC NEologd)

  • unidic: 日本語 UniDic(拡張) - 詳細な言語情報を含む学術標準辞書(UniDic)

  • cc-cedict: 標準中国語 (traditional/simplified) - コミュニティによって維持されている中英辞書(CC-CEDICT)

filter

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

  • kind: フィルターのタイプです。サポートされる値:

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

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

  • tags: 除外する品詞タグのリストです。使用可能なタグは kind によって異なります:

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

    • japanese_stop_tags の場合:完全なタグコードを使用します(例:助詞,格助詞、助詞,係助詞、助動詞)。日本語のタグは完全一致が必要です。IPADIC の完全なリストについては、日本語の品詞タグリファレンスを参照してください。

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

例​

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

韓国語の例​

python
from pymilvus import MilvusClient

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT", token="YOUR_CLUSTER_TOKEN")

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)

期待される出力:

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

korean_stop_tags がない場合、出力には 에서(〜で)、는(主題標識)、을(目的語標識)などの助詞が含まれます。これらは通常、検索には役立ちません。

日本語の例​

python
from pymilvus import MilvusClient

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT", token="YOUR_CLUSTER_TOKEN")

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)

期待される出力:

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

japanese_stop_tags がない場合、出力には の(所有)、は(主題標識)、です(コピュラ)などの助詞が含まれます。

このページは役に立ちましたか?