# 7.7. ノーマライザー

## 7.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"` は `"black"` に正規化され、 `"COLOR"` は `"color"` に正規化されます。

テーブルが全文検索用の語彙表の場合、トークナイズされたトークンは正規化されます。なぜなら、トークンはテーブルのキーとして保存されるからです。テーブルのキーは前述のように正規化されます。

## 7.7.2. 組み込みノーマライザー

以下は組み込みのノーマライザーのリストです。

- 7.7.2.1. `NormalizerAuto`
- 7.7.2.2. `NormalizerNFKC100`
- 7.7.2.3. `NormalizerNFKC121`
- 7.7.2.4. `NormalizerNFKC130`
- 7.7.2.5. `NormalizerNFKC51`
- 7.7.2.6. `NormalizerTable`

## 7.7.3. 追加のノーマライザー一覧

いくつか追加のノーマライザーがあります。

> - groonga-normalizer-mysql

## 7.7.4. 参考

- table_create