groongaに追加されたNormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMarkとは

> もっとgroongaを知ってもらおう!ということで週刊groongaをはじめました。毎週木曜にgroongaやmroonga、rroongaのトピックを投稿予定です。

いよいよ、[gihyo.jp](http://gihyo.jp/)さんでgroongaの隔週更新連載が始まりました!! 
第3回の記事も公開されたので、一読をおすすめします。

* [「第1回 全文検索エンジンgroongaを紹介します！」](http://gihyo.jp/dev/clip/01/groonga/0001)
* [「第2回 groongaをRuby On Railsでも使ってみた ～chikamap.comの事例から」](http://gihyo.jp/dev/clip/01/groonga/0002)
* [「第3回 すべてのMySQLユーザに高速な全文検索機能を！ - mroongaの紹介」](http://gihyo.jp/dev/clip/01/groonga/0003)

連載は始まりましたが、利用事例をどんどん紹介していきたいです。(利用事例のストックが尽きたら終了してしまいます。)
groongaやmroonga、rroongaを実際に使っていて利用事例記事を書いてもいいよ、という人をまだまだ募集しています。
詳細は[groonga普及のための協力のお願い](http://sourceforge.jp/projects/groonga/lists/archive/dev/2013-February/001186.html)を参照してください。

# はじめに

オープンソースの[カラムストア機能付き全文検索エンジンgroonga](http://groonga.org/ja/)を公開しています。

最新のバージョンは2013年4月29日にリリースした[3.0.3](http://groonga.org/ja/docs/news.html#release-3-0-3)です。
今回は、groongaに追加された(正確にはgroonga-normalizer-mysqlに追加された) ``NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`` について紹介します。


# ``NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`` とは

``NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`` とはgroongaで使えるノーマライザーのうちの1つです。

groongaにはプラグインの仕組みがあるので、後からノーマライザーを追加することができます。

以前、[groongaでMySQL互換のノーマライザーを使うには](http://qiita.com/items/acc7059eb0c6bbd4a427)という記事を書きました。そのときは ``NormalizerMySQLGeneralCI`` と ``NormalizerMySQLUnicodeCI`` だけだったので、さらにもう1つノーマライザーが追加されたことになります。

## groongaにノーマライザーを追加するには

まずは、groongaをインストールしてください。

インストール手順は各種ディストリビューション向けに[ドキュメント](http://groonga.org/ja/docs/install.html)があります。

追加のノーマライザーは ``groonga-normalizer-mysql`` というパッケージが用意されています。
例えば、Debian系であれば以下のようにしてインストールできます。

```
sudo apt-get install groonga-normalizer-mysql
```

また、パッケージのインストールが終わったら、[追加のノーマライザー](http://groonga.org/ja/docs/reference/normalizers.html#additional-normalizers)で記載されているように、ノーマライザーを事前に登録します。

登録するにはgroongaコマンドをコマンドラインから起動した後に、以下のようにregisterコマンドを実行します。

```
% groonga
> register normalizers/mysql
[[0,1368067202.26793,0.0129163265228271],true]
```

## ノーマライザーを試すには

ノーマライザーのインストールが終わったら実際に試してみましょう。

groongaコマンドをコマンドラインから起動した状態であれば、 ``normalize`` コマンドでノーマライザーの挙動を確認することができます。

例えば、MySQL互換のノーマライザーに、``NormalizerMySQLUnicodeCI`` があります。
このノーマライザーはMySQLでいうところの ``utf8_unicode_ci`` に相当します。

いくつか試してみましょう。

```
normalize NormalizerMySQLUnicodeCI "ブラック"
normalize NormalizerMySQLUnicodeCI "ふらつく"
normalize NormalizerMySQLUnicodeCI "バルス"
normalize NormalizerMySQLUnicodeCI "パルス"
```

この結果は以下のようになります。

```
[[0,1368069281.9754,8.82148742675781e-06],{"normalized":"ふらつく","types":[]}]
[[0,1368069281.97542,7.62939453125e-06],{"normalized":"ふらつく","types":[]}]
[[0,1368069281.97544,9.05990600585938e-06],{"normalized":"はるす","types":[]}]
[[0,1368069281.97545,7.62939453125e-06],{"normalized":"はるす","types":[]}]
```

「ブラック」と「ふらつく」、「バルス」と「パルス」で同じ結果となっていることがわかります。
ということは、全文検索したときにこれらは同一視されてしまうということです。

「ブラック」で検索しているのに、「ふらつく」がヒットしてしまったり、「パルス」で検索しているのに「バルス」がヒットしてしまうのでは困りものです。

そこで追加されたのが、 ``NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`` というわけです。

このノーマライザーを使うと、濁音・半濁音・「ぁ」「ぃ」「ぅ」「ぇ」「ぉ」「っ」などは区別しつつ、カタカナとひらがなは同一視することができるようになります。

先程のサンプルを ``NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`` で再度試してみましょう。

```
normalize NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark "ブラック"
normalize NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark "ふらつく"
normalize NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark "バルス"
normalize NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark "パルス"
```

この結果は以下のようになります。

```
[[0,1368069396.23875,1.33514404296875e-05],{"normalized":"ぶらっく","types":[]}]
[[0,1368069396.23877,1.04904174804688e-05],{"normalized":"ふらつく","types":[]}]
[[0,1368069396.23879,9.29832458496094e-06],{"normalized":"ばるす","types":[]}]
[[0,1368069396.2388,1.19209289550781e-05],{"normalized":"ぱるす","types":[]}]
```

今度は「ブラック」と「ふらつく」、「バルス」と「パルス」を区別できていることがわかります。

# まとめ

今回はgroongaに追加された ``NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`` について紹介しました。

groongaに興味を持ったなら、まずは[インストール](http://groonga.org/ja/docs/install.html)して試してみてください。

groongaの基本的な動作を知るための[チュートリアル](http://groonga.org/ja/docs/tutorial.html)もあります。インストールしたら試してみてください。