8.7. ノーマライザー¶
8.7.1. 概要¶
Groongaには正規化をするノーマライザーモジュールがあります。これはテキストをトークナイズするときとテーブルのキーを保存するときに使われます。例えば、正規化をした後は A と a は同じ文字として扱われます。
ノーマライザーモジュールはプラグインとして追加できます。ノーマライザープラグインをGroongaに追加することでテキストの正規化方法をカスタマイズできます。
ノーマライザーモジュールはテーブルに関連付いています。テーブルは0個か1個のノーマライザーモジュールを持つことができます。 table_create の normalizer オプションでテーブルにノーマライザーオプションを関連付けることができます。
以下は NormalizerAuto ノーマライザーモジュールを使う table_create の例です。
実行例:
table_create Dictionary TABLE_HASH_KEY ShortText --normalizer NormalizerAuto
# [[0, 1337566253.89858, 0.000355720520019531], true]
ノート
Groonga 2.0.9以前には table_create に --normalizer オプションはありません。代わりに KEY_NORMALIZE フラグを使っていました。
Groonga 2.1.0以降で古いデータベースを開くことができます。ここでいう古いデータベースとはGroonga 2.0.9以前で作ったデータベースということです。しかし、一度新しいGroongaで開いたデータベースを2.0.9以前のGroongaで開くことはできません。一度 Groonga 2.1.0以降のGroongaでデータベースを開くと、 KEY_NORMALIZE フラグ情報がノーマライザー情報に変換されます。そのため、2.0.9以前のGroongaは、一度Groonga 2.1.0以降で開いたデータベース内から KEY_NROMALIZE フラグの情報を見つけることができません。
ノーマライザーモジュールを持っているテーブルのキーは正規化されます。
実行例:
load --table Dictionary
[
{"_key": "Apple"},
{"_key": "black"},
{"_key": "COLOR"}
]
# [[0, 1337566253.89858, 0.000355720520019531], 3]
select Dictionary
# [
# [
# 0,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# [
# [
# 3
# ],
# [
# [
# "_id",
# "UInt32"
# ],
# [
# "_key",
# "ShortText"
# ]
# ],
# [
# 1,
# "apple"
# ],
# [
# 2,
# "black"
# ],
# [
# 3,
# "color"
# ]
# ]
# ]
# ]
NormalizerAuto ノーマライザーはテキストを小文字に正規化します。例えば、 "Apple" は "apple" に正規化され、 "black" は "blank" に正規化され、 "COLOR" は "color" に正規化されます。
テーブルが全文検索用の語彙表の場合、トークナイズされたトークンは正規化されます。なぜなら、トークンはテーブルのキーとして保存されるからです。テーブルのキーは前述のように正規化されます。
8.7.2. 組み込みノーマライザー¶
以下は組み込みのノーマライザーのリストです。
- NormalizerAuto
- NormalizerNFKC51
8.7.2.1. NormalizerAuto¶
通常は NormalizerAuto ノーマライザーを使うべきです。 NormalizerAuto はGroonga 2.0.9以前で使っていたノーマライザーと同じものです。2.0.9以前のGroongaの table_create の KEY_NORMALIZE フラグは、2.1.0以降のGroongaの table_create の --normalizer NormalizerAuto と同じです。
NormalizerAuto はすべてのエンコーディングに対応しています。UTF-8でエンコードされたテキストにはUnicodeのNFKC(Normalization Form Compatibility Composition)を使います。他のエンコーディング用にはエンコーディング毎に独自の正規化をします。これらの独自の正規化の結果はNFKCでの結果と似たものになります。
例えば、半角カタカナ(例えば「カ」: U+FF76 HALFWIDTH KATAKANA LETTER KA) + 半角カタカナの濁点(「゙」: U+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK)は濁点付きの全角カタカナ(「ガ」: U+30AC KATAKANA LETTER GA)に正規化されます。前者は2文字ですが、後者は1文字です。
以下は NormalizerAuto ノーマライザーを使う例です。
実行例:
table_create NormalLexicon TABLE_HASH_KEY ShortText --normalizer NormalizerAuto
# [[0, 1337566253.89858, 0.000355720520019531], true]
8.7.2.2. NormalizerNFKC51¶
NormalizerNFKC51 はUnicode 5.1用のUnicode NFKC(Normalization Form Compatibility Composition)を使ってテキストを正規化します。UTF-8エンコーディングのみをサポートしています。
通常、 NormalizerNFKC51 を明示的に使う必要はありません。代わりに NormalizerAuto を使ってください。
以下は NormalizerNFKC51 ノーマライザーを使う例です。
実行例:
table_create NFKC51Lexicon TABLE_HASH_KEY ShortText --normalizer NormalizerNFKC51
# [[0, 1337566253.89858, 0.000355720520019531], true]
8.7.3. 追加のノーマライザー¶
groonga-normalizer-mysql パッケージで提供される追加のノーマライザーのリストです。
- NormalizerMySQLGeneralCI
- NormalizerMySQLUnicodeCI
- NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark
groonga-normalizer-mysql はGroongaのプラグインです。MySQL互換のノーマライザーを提供します。ノーマライザー NormalizerMySQLGeneralCI に対応するのは utf8mb4_general_ci です。
事前に normalizers/mysql プラグインを登録する必要があります。
実行例:
register normalizers/mysql
# [[0, 1337566253.89858, 0.000355720520019531], true]
以下は NormalizerMySQLGeneralCI ノーマライザーを使う例です。
実行例:
table_create MySQLGeneralLexicon TABLE_HASH_KEY ShortText --normalizer NormalizerMySQLGeneralCI
# [[0, 1337566253.89858, 0.000355720520019531], true]