正規化を使いたくても

| コメント(0) | トラックバック(0)

あるときJavaプログラムで、入力されたテキストデータに含まれる所謂「全角・半角」の区別を無視したいことがありました。例えば「RAM」という言葉が含まれていたら、所謂「全角」であろうが「半角」であろうがそれは同じ文字なので、重複符号化のせいにすぎないそういう非本質的な区別は無視したいわけです。

本当ならこれぞまさに正規化処理の出番で、JavaではUnicode正規化が簡単に使えるようになっているのですが、しかしUnicodeの正規化仕様はちょっと使いづらいところがある。

というのは、通常の正規化形式であるNFC, NFDはいずれも、「全角・半角」の区別をそろえてくれないので私の目的の役には立たない。一方、NFKC, NFKDはというと、「全角・半角」をそろえてくれるのはいいのだけど、三点リーダがピリオド3つになってしまうとか、記号類について余計なお節介をしてくれて何がどうなるのか正直私も覚えてないので、できれば触りたくない。

そのときどうしたかというと、入力データがもっぱら言語表記用の文字であって、記号類はほぼなかったので、NFKCを使いました。互換漢字もなかったのでその辺の問題もない。

入力データの性質・内容や、自分がそこで何をしたいのかという目的・用途によって、どういう措置をとるのがいいのか考える必要があります。

一般的にいって、日本語処理上では、正規化処理は次のようになっているのが使いやすいと考えます。

  1. 英数字はいわゆる半角にそろえる
  2. 片仮名はいわゆる全角にそろえる
  3. 結合文字は使わない方に(つまり合成済みの符号位置に)そろえる
  4. それ以外の余計なことはしない

最初の2つは、要するにJIS X 0208:1997で(ASCII/JIS X 0201と共用する場合に)いっていることと同じ話す。残りの2つは、つまるところ、JIS X 0208/0213に対応する符号位置はそのままいじらずに残しておいてくれよということです。

UnicodeにはUnicodeなりの方針があるのでしょうが、それが結果として使いやすくなっているかは一概にいえないものがあると思います。

トラックバック(0)

トラックバックURL: http://yanok.net/yanok/mt-tb.cgi/461

コメントする

最近のブログ記事

テレワークの環境改善〜CO2濃度をチェックする
テレワークの問題点 新型コロナウイルスの…
エンジニアHubにて「文字コード再入門─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!」公開
「エンジニアHub」にて記事を執筆しまし…
National Geographic Your Shot で Daily Dozen に選ばれた話
ブログをさぼっている間に時間がずいぶん経…
情報処理学会から山下記念研究賞を頂いた話
ブログをさぼっている間に時間がずいぶん経…
Go と Rustの文字列
Go言語における文字列はUTF-8のバイ…

広告