設定
LinderaはYAML形式の設定ファイルを読み込むことができます。
環境変数 LINDERA_CONFIG_PATH にファイルのパスを指定してください。Rustコードでトークナイザーの動作をコーディングすることなく、簡単に利用できます。
segmenter:
mode: "normal"
dictionary: "embedded://ipadic"
# user_dictionary: "./resources/user_dict/ipadic_simple_userdic.csv"
# keep_whitespace: false
# skip_whitespace: false # MeCab と同様に空白をラティス上で読み飛ばす。SudachiDict 以外はデフォルトでオン。false で空白ノードを残す(v7 より前の動作)
# use_mmap: false # ファイルシステム辞書(embedded:// ではない辞書)にのみ意味がある
# max_grouping_len: 24 # 未知語のグルーピング長の上限。省略または 0 で無制限
# unknown_word_ladder: true # 短い未知語候補も生成する(デフォルト: true)
# space_penalty: false # 左側空白ペナルティ(韓国語)。ルールを同梱する辞書(ko-dic)ではデフォルトでオン。false でオフ、オブジェクトで明示的なルールを指定
character_filters:
- kind: "unicode_normalize"
args:
kind: "nfkc"
- kind: "japanese_iteration_mark"
args:
normalize_kanji: true
normalize_kana: true
- kind: mapping
args:
mapping:
リンデラ: Lindera
token_filters:
- kind: "japanese_compound_word"
args:
# Merge the numeral tokens only. A counter merged into the number token keeps japanese_number from converting it.
tags:
- "名詞,数"
new_tag: "名詞,数"
- kind: "japanese_number"
args:
tags:
- "名詞,数"
- kind: "japanese_stop_tags"
args:
tags:
- "接続詞"
- "助詞"
- "助詞,格助詞"
- "助詞,格助詞,一般"
- "助詞,格助詞,引用"
- "助詞,格助詞,連語"
- "助詞,係助詞"
- "助詞,副助詞"
- "助詞,間投助詞"
- "助詞,並立助詞"
- "助詞,終助詞"
- "助詞,副助詞/並立助詞/終助詞"
- "助詞,連体化"
- "助詞,副詞化"
- "助詞,特殊"
- "助動詞"
- "記号"
- "記号,一般"
- "記号,読点"
- "記号,句点"
- "記号,空白"
- "記号,括弧閉"
- "その他,間投"
- "フィラー"
- "非言語音"
- kind: "japanese_katakana_stem"
args:
min: 3
- kind: "remove_diacritical_mark"
args:
japanese: false
Segmenter のオプション
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
mode | string | "normal" | 分割モード。"normal" または "decompose" |
dictionary | string | (必須) | 辞書 URI。例: "embedded://ipadic" |
user_dictionary | string | (なし) | ユーザー辞書のパス |
keep_whitespace | bool | false | 空白トークンを出力する。このとき空白はラティスにも残るため、他のトークンも、MeCab と同様に空白を読み飛ばすデフォルトの出力と変わることがある |
skip_whitespace | bool | (辞書の設定: true、SudachiDict は false) | keep_whitespace が false のとき、MeCab と同様に空白をラティス上で読み飛ばし、前後の語を直接接続する。false で空白を独立したノード(空白の見出し語か SPACE の未知語)としてラティスに残す(v7 より前の動作)。そのノードの連接コストがすべて 0 の ko-dic では、空白のたびに連接の文脈が途切れる。省略または null で辞書の metadata.json のデフォルトを使う。Segmenter を参照 |
use_mmap | bool | mmap feature が有効なとき on(デフォルト) | 辞書をメモリマップする。ファイルシステム辞書(embedded:// ではない辞書)にのみ意味がある |
max_grouping_len | integer | (無制限) | 未知語グルーピングの上限(先頭の 1 文字を超えた文字数)。MeCab の max-grouping-size に相当する(MeCab のデフォルトは 24)。上限は各位置で判定され、上限を超えるランはその位置ではグルーピングされず、1 文字候補(および候補ラダーと辞書語)が残る。残りの末尾は上限に収まった時点で再びグルーピングされるため、未知語トークンは最長で上限 + 1 文字になる。キーを省略するか 0 を指定すると無制限になる |
unknown_word_ladder | bool | true | MeCab や Vibrato と同様に、文字の既定の文字種の char.def の LENGTH フィールドまでの短い未知語候補も生成する。false を指定すると v6 より前と同じくこれらの候補を作らない。ただし、グルーピングした未知語の内側から始まる未知語など、その後の変更による出力の違いは残る。Segmenter を参照 |
space_penalty | bool または object | (辞書同梱のルール、あれば) | 左側空白ペナルティ(mecab-ko の left-space-penalty-factor)。直前に空白があり、先頭品詞タグが一覧にある候補にコストを加算する。省略または null で辞書が metadata.json に同梱するルールを使用(ko-dic は mecab-ko-dic のルールを同梱するため ko-dic ではデフォルトでオン。他の同梱辞書はルールを持たない)、false でオフ、true で辞書のルールを要求(同梱しない辞書ではエラー)、オブジェクト {"rules": [{"pos": [...], "cost": n}, ...]} で明示的なルールを指定。Segmenter を参照 |
% export LINDERA_CONFIG_PATH=./resources/config/lindera.yml
use std::path::PathBuf; use lindera::analysis::tokenizer::TokenizerBuilder; use lindera::LinderaResult; fn main() -> LinderaResult<()> { // 設定ファイルからトークナイザーの設定を読み込む let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) .join("../resources") .join("config") .join("lindera.yml"); let builder = TokenizerBuilder::from_file(&path)?; let tokenizer = builder.build()?; let text = "Linderaは形態素解析エンジンです。ユーザー辞書も利用可能です。".to_string(); println!("text: {text}"); let tokens = tokenizer.tokenize(&text)?; for token in tokens { println!( "token: {:?}, start: {:?}, end: {:?}, details: {:?}", token.surface, token.byte_start, token.byte_end, token.details ); } Ok(()) }