照合順序

日本語をデータとして取り扱う際に発生する問題のひとつに、照合順序 (照合順番/collation)というものがあります。

ごく一般的に知られる具体的なものでは、辞書順(あいうえお順・50音順)、ローマ字順、文字コード順などがあります。

No名前漢字名前カナヘボン式
1山崎 一郎ヤマザキ イチロウYamazaki Ichiro
2山崎 太郎ヤマサキ タロウYamasaki Taro
3山沢 三郎ヤマサワ サブロウYamasawa Saburo

上記の表は カナ表記の辞書順で並べたもので、恐らく私たち日本人が期待する一般的な並び順だと思われます。

ここで注意したいのは “山崎” の読みに濁点の有無があるところです。日本人の人名には この「ヤマザキ」と「ヤマサキ」や以外にも、“中田” と書いて「ナカタ」と「ナカダ」、“大津” と書いて「オオツ」と「オオヅ」など、漢字の上で 濁音なのかどうかが明らかでないものが多くあります。

このような名前は ご本人は ともかくとして他人が名簿で見る場合、濁点の有無は意識しません。ですから並べ替えをするときは、濁点の有無に関わらず、その後ろに続くカナが何であるかを見て順序を決めることになります。

このカナでの並べ方についてのルールが JIS X 4061 日本語文字照合順番として定められています。これには 濁点の有無の他に   などの小書き文字や、 の長音や繰り返しについても規定されます。

小書き文字 などは基底文字と呼ばれるに置き換えていき、長音 “チーズ” なら “ちいず” と後方の字を見て置き換えてまず並び替えをし、最終的にその範囲内で濁音があるものを後のデータとして扱います。文字一個ずつ前後の条件によって評価が変わり、かなり複雑な制御が必要になります。

以下は JIS解説にある例の一部です。左から右に行くほど辞書順で後ろということになります。

さとさどさとうさどうさとうやサトーさとおや
(里)(佐渡)(砂糖)(茶道)(砂糖屋)(Satow)(里親)
ファールぶあいファゥルファウルファンふあんぶあん
(foul)(歩合)(foul)(foul)(fan)(不安)(撫安)
しょうしようじょうじようしょうししょうじしようじ
(商)(使用)(乗)(滋養)(小史)(障子)(使用時)
じょうしじょうじショーショオジョーじょおうジョージ
(上梓)(常時)(show)(Shaw)(jaw)(女王)(George)

データの登録数が増えてくると、一文字一文字チェックしていたら システムの計算量が膨大になり、応答が遅くなります。あらかじめ並び替えに都合の良いように加工したデータを作ってセットで保存したり、最初から並び替えた状態でデータを登録しておくなど、システムとしては余分なエネルギーを使うことになります。

この制御は あらゆるシステムで正確に扱えるかというと、必ずしもそうとは言えません。

古典的なコンピューター システムでは、1文字単位でその文字のコードを並べ、単純に数値の大小で比較します。そのようなシステムでカナ順に並べようとすると、
ヤ マ サ キ > ヤ マ サ ワ > ヤ マ ザ キ
の並びになってしまいます。

これは、とを足したりして扱っているのではなく、でコードの異なる1文字としてそれぞれ管理しているためです。は Unicode で言えば U+30B5 (UTF-8にエンコードするとE3 82 B5) 、だと U+30B6 (同 E3 82 B6) ですから、1文字づつ見る限りは正しい動作です (古いコードの Shift JIS/X0208 でも、= 0x8354 と = 0x8355 となり同じことです)。

幸い、比較的新しいシステムではこの日本的な並び替えを扱えるものが増えてきています。しかしながら現状ではまだ両方のシステムが混在した状態です。

複数の場所から並べ替え済みデータを取り出して確認するような照合作業では、名前が全く違う場所に登場することもあり注意が必要です。

仮に 正しい並び替えが出来るシステムを使っていても 油断は できません。

上記の “ヤマチロウ” < “ヤマロウ” のような場合、姓 と 名 を またいで判断しています。姓&名を 連結した状態で並び替えればより先に来ることに なりますが、先に姓を見て並び替えた後に 名の方を見るという手順だと、結果は逆になります。

増えるカナ

JIS規格の当初には無かったような新しい文字も増えています。

代表的には   のような、アイヌ語・韓国語・琉球語などのために追加されたカタカナの小書き文字があります。これらの文字はのような大書き文字に置き換えて考えれば良いですが、コードは(U+30F3) よりも後ろ (U+31F1〜U+31FF) を持っていたりするので、古いシステムでは全く違う位置に出る可能性があります。

また 変体がな のように カナでありながら カナとして扱われていな文字もあります。変体がな では漢字同様に 1つの文字に 複数の読み方が当てられているものもあり、どのよみを基本にすればよいか不確実です。

さらに文字にはカナ漢字に限らず絵文字のようなものもどんどん追加されています。何と読めばよいか全く分からないこともあるでしょう。純粋な人名にそれが含まれることはないにせよ、ニックネームのようなものにはそれが含まれることもあり、また検索対象となることもあります。

ローマ字表記

最初の表では 3列目にヘボン式ローマ字を使用した表記も加えています。

日本人しかいないような名簿であれば JIS規格は 有効ですが、外国人が含まれるような場合、カナでは情報の一部が捨てられてしまうことになりますから、英字表記がないと困ることがあります。

ところが ローマ字を使用した場合、ヤマキ/ヤマキは yamazaki/yamasakiとなり、アルファベット順で並べると全く離れた場所になります。日本語の濁点の有無のあいまいさを考えずに そのまま英字にしてもうまく機能しません。

こういう問題が起こるのは 人名に限らず、会社や法人名、その他に商品やサービス名など様々なところで影響があります。そういったものでは カナや漢字だけでなく アルファベットが含まれる場合もあります。

とくに “Team” を「チーム」か「ティーム」かタ行のズレや、“flag” を「フラッグ」か「フラグ」かなど 促音の有無など、表記が1つに定まらないようなこともあり、カナで表現し直すのが逆に難しいものもあります。

つまりカナの表記に外来語の処理を混ぜ込むような形で、あらたな表現方法が求めらるということです。

並び順序をどのように扱うのか、システム側での制御を組み替えることでも、ある程度対応はできるかもしれません。szが隣同士になるように日本式のアルファベット順序を考えることもできます。あるいは、単語全体をみてローマ字として認識可能であれば zsに読み替えて並べ替えるなどです。

はたまたaに対してåのであるとか、sに対するß(ドイツ語のエスツェット) のように、s゙aとして英字にアクセント記号のようなもので表記する手もあります。中国語の拼音で四声を区別するのに近いかもしれません。

あるいはswasza とするとか、英字での並び順を意識した形の〈日本語ソート対応ローマ字〉を 新たに編み出すということも考えられます。

もしかすると日本語のカナのつづり方を改造して、 “scene” とか 二重子音や 二重母音やその他の音を表現可能に取り込むという対応も理論上はできるかもしれません。この場合は現在の文字集合から変える必要もなく、日本語の都合だけでルールを自由に設定できる点が異なります。