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)