キヤノンとキャノン

  • たとえば、企業名の“キヤノン”。大きい“ヤ”で表記することを知っている人は多いですが、普通発音するときは“キャノン”と言いますよね。
  • 文字列検索において、アルファベットの大文字小文字を同一視するのと同じ感覚で、“ヤ”と“ャ”、“ツ”と“ッ”など、いわゆる撥音・拗音を同一視したい場合があります。
  • 今回のシステムではDBMSにMySQL5が採用されています。これで実現するにはどうしようかと、参考本をめくっていると…REGEXP、正規表現による文字列マッチングができそうです。
  • 早速やってみると…

実行

SELECT  'キヤノン' REGEXP 'キ[ヤャ]ノン';

結果

0
  • マッチしない…キ[ヤャ]にすると…

実行

SELECT  'キヤノン' REGEXP 'キ[ヤャ]';

結果

1
  • マッチする。どういうことかとググッってみると、日本語(マルチバイト)文字に対応していないそうです。しかし、やはり同じことをする人はいらっしゃいまして、http://www.irori.org/ で、mregexpというユーザ関数が公開されています。
  • インストールについてはさらりとしか触れていませんが、私などはよくわからずやっているのでちょっとハマりました。。。(MySQLってこんなことができるんですね)
  • コンパイル時
    • mysql_configにパスが通っていなかったこと。
  • 起動スクリプト
    • LD_LIBRARY_PATHに、mysqlのパスに加えてOnigurumaへのパスも設定しないと動かなかったこと。
  • 関数を登録する部分でエラーになる。(mregexp はOKだった)
CREATE FUNCTION mregexp_version RETURNS STRING SONAME 'mregexp.so';
 ERROR 1127 (HY000): Can't find function 'mregexp_version_init' in library


まあ、とりあえずmregexpは登録できて動作は確認できたので、詳細は後日調べよう。

facebook slideshare rubygems github qiita