ntext型プロトタイプ

年末年始休暇の宿題だった、PostgreSQL用の日本語正規化テキスト型 ntext のプロトタイプができた。
とりあえずこんな感じで動作するところまではできた。

動作例

\dx コマンドでEXTENSION内容を表示。英語が正しいのかどうかは知らん。

ntext=# \dx ntext
                    List of installed extensions
 Name  | Version | Schema |               Description               
-------+---------+--------+-----------------------------------------
 ntext | 1.0     | public | Japanese normalize compare text (UTF-8)
(1 row)

ntext型の列をもつテーブルを作っておく。

ntext=# \d test
     Table "public.test"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 
 data   | ntext   | 

データをテキトーに放り込む。

ntext=# INSERT INTO test VALUES (1, 'エヴァンゲリヲン'),(2,'エヴァンゲリオン'),(3, 'Hellsing'), (4, 'ニャル子さん');
INSERT 0 4
ntext=# SELECT * FROM test;
 id |       data       
----+------------------
  1 | エヴァンゲリヲン
  2 | エヴァンゲリオン
  3 | Hellsing
  4 | ニャル子さん
(4 rows)

ntext=# 

検索してみる。
まず、カタカナ正規化の例。「ヲ」を「オ」に正規化するのはやりすぎかもしれんが・・・

ntext=# SELECT * FROM test WHERE data = 'エバンゲリオン';
 id |       data       
----+------------------
  1 | エヴァンゲリヲン
  2 | エヴァンゲリオン
(2 rows)

ntext=#

次は全角/半角/大文字/小文字英字のケース(例示はしてないけど、全角/半角数字の正規化も実装している)。

ntext=# SELECT * FROM test WHERE data = 'hellsing';
 id |       data       
----+------------------
  3 | Hellsing
(1 row)

最後は平仮名の正規化。

ntext=# SELECT * FROM test WHERE data = 'にゃる子サン';
 id |     data     
----+--------------
  4 | ニャル子さん
(1 row)

今後の拡張

一応、ここまではできたが、まだやることは残っている。

まだ警告とかも取り切ってないので、そのへんをきちんと整備して、リグレッションテストもきちんと組み込んだら、githubにアップしておこう。

なんとか、今月の勉強会までに組み込めればいいんだけどなあ・・・