Elasticsearch の kuromoji-analysis plugin に含まれる filter について淡々と説明
Char filter
kuromoji_iteration_mark
踊り字(々、ゝ、ゞなど)を正規化する。
normalize_kanji
が true
の場合、漢字の踊り字(々)を正規化、normalize_kana
がtrue
の場合、かなの踊り字(ゝ、ゞ、ヽ、ヾ)を正規化する。
デフォルトは、normalize_kanji
、normalize_kana
ともに true
。
コレが必要になったケースはあまり経験したことがない...。
つねゞゝ -> つねづね 馬鹿々々しい -> 馬鹿馬鹿しい
Token filter
kuromoji_baseform
動詞/形容詞の各活用形を終止形に変換する。
飲ま -> 飲む
kuromoji_part_of_speech
話し言葉で使われる特定の品詞を除去する。
具体的にどの品詞が対象になるのかは、Lucene の stoptags.txt ファイルを参照。
基本的に入れたほうがいい filter であるが、形態素解析器に対象品詞と判断されるような固有名詞(ハンドルネームとか)が登場した場合、逆に検索に全く引っ掛からなくなることがあるため、その場合は都度ユーザ辞書等で対処していく必要がある。
寿司がおいしいね -> 寿司, おいしい
kuromoji_readingform
漢字→読みがな(カタカナorローマ字)に変換する。
読みがなで検索させたい、等の用途があれば使用できる。
東京 -> トウキョウ
kuromoji_stemmer
単語末尾の長音記号(ー)を除去する。
末尾長音記号の除去前後が同一とみなされて困るケースは少なく、基本何も考えずに入れておいても良いと思われる。
プログラマー -> プログラマ
cjk_width
全角英数記号を半角英数記号、半角カタカナを全角カタカナに変換する。
上記の変換がUnicode正規化の互換分解(Compatibility Decomposition)の一部であり、機能面で analysis-icu に含まれる icu_normalizer のサブセットになっているのと、char filter である icu_normalizer のほうが、 tokenize 前に処理される分使い勝手が良く、こちらを敢えて使う必要性はあまり感じられない。
@12345->@12345 ラーメン -> ラーメン
ja_stop
ストップワード(あまりに一般的であるため、検索文字列として意味が薄くなってしまう単語)を除去する。
どの単語が対象になるかは、Lucene の stopwords.txt を参照。
使用することで使いやすい検索機能となる一方、kuromoji_part_of_speech 同様、ストップワードを含む固有名詞を認識させるために、ユーザ辞書と併用する必要が出てくるときもある。
このラーメンはおいしい -> ラーメン, おいしい
kuromoji_number
漢数字→半角数字に変換する。
漢数字と英数字を同一視したいケース、たとえば住所の地番を正規化する用途であれば使えるかもしれない。
二〇二一 → 2021