STUDIO PLUS TWO ブログ

横浜のウェブエンジニアチーム、STUDIO PLUS TWO(スタジオ・プラスツー)の技術ブログです。https://studioplustwo.jp/

Elasticsearch の kuromoji-analysis plugin に含まれる filter について淡々と説明

Char filter

kuromoji_iteration_mark

踊り字(々、ゝ、ゞなど)を正規化する。

normalize_kanjitrue の場合、漢字の踊り字(々)を正規化、normalize_kanatrueの場合、かなの踊り字(ゝ、ゞ、ヽ、ヾ)を正規化する。

デフォルトは、normalize_kanjinormalize_kana ともに true

コレが必要になったケースはあまり経験したことがない...。

つねゞゝ -> つねづね
馬鹿々々しい -> 馬鹿馬鹿しい

Token filter

kuromoji_baseform

動詞/形容詞の各活用形を終止形に変換する。

飲ま -> 飲む

kuromoji_part_of_speech

話し言葉で使われる特定の品詞を除去する。

具体的にどの品詞が対象になるのかは、Lucene の stoptags.txt ファイルを参照。

基本的に入れたほうがいい filter であるが、形態素解析器に対象品詞と判断されるような固有名詞(ハンドルネームとか)が登場した場合、逆に検索に全く引っ掛からなくなることがあるため、その場合は都度ユーザ辞書等で対処していく必要がある。

github.com

寿司がおいしいね -> 寿司, おいしい

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 同様、ストップワードを含む固有名詞を認識させるために、ユーザ辞書と併用する必要が出てくるときもある。

github.com

このラーメンはおいしい -> ラーメン, おいしい

kuromoji_number

漢数字→半角数字に変換する。

漢数字と英数字を同一視したいケース、たとえば住所の地番を正規化する用途であれば使えるかもしれない。

二〇二一 → 2021