日本語の辞書順整列

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

日本語の辞書順整列とは、正確にいえば「日本語の辞書の見出し語を、国語辞典に掲載されている順序に整列すること」である。
たとえば、「か(蚊)」「が(とりたて詞)」「ガ(蛾)」「かに(蟹)」「ガニ(蟹の鰓部分。「蟹は食ってもガニ食うな」と云われる)」を、いわゆる「辞書順整列(文字コードと文字列長による整列)」すると、国語辞典の見出し語に期待される順序には並んではくれない(「か」「かに」「が」「ガ」「ガニ」の順になる)。それゆえ(WikiPedia でも使われている) MediaWikiでは、少しでもその現状を解消しようとして、整列キーを工夫しようとしている。よってデフォルトソートキーとしては「キャバレー」は「きやはれ」、「ブラジャー」は「ふらしや」となる。
ところが、長音・撥音・拗音・カタカナ/ひらがなといった属性をアトリビュート属性を第二キーとし、第一キーと第二キーを通常のひらがなよりも前にある文字コードを挟んで整列キーとすると、辞書順整列によって日本語の辞書の見出し語を、国語辞典に掲載されている順序に整列することができる。

概要[編集]

いわゆる「辞書順整列」は、「文字コード順整列」と「文字列の長さによる整列」によっている。
ところが国語辞典の見出し語は、そのまま辞書順整列を行なうと、辞書の見出し語における一般的な順番にはならない。
「かじ(梶)」「かじまけんせつ(鹿島建設)」「かしまじんじゃ(鹿島神社)」「かしむら(樫村)」「かじむら(梶村)」「かじや(梶谷)」「かしやま(樫山)」「かじやま(梶山)」の読みをそのままコード順に辞書順整列すると、

  1. かしまじんじゃ(鹿島神社)
  2. かしむら(樫村)
  3. かしやま(樫山)
  4. かじ(梶)
  5. かじや(梶谷)
  6. かじまけんせつ(鹿島建設)
  7. かじむら(梶村)
  8. かじやま(梶村)

となってしまうため、いわゆる「紙の辞書」との突合せ作業の際に行ったり来たりの手間がかかるので、「カタカナ<ひらがな」「清音<半濁音<濁音」「拗音・促音<平音」「短音<長音」といった差異に配慮しなければならない。
このとき、比較関数を工夫して対応しようとおもうと、「順序関係が循環してしまって処理が終わらない」といった事態が起きる。そこで、「第一キーと第二キーを用いて一般的な『辞書順整列』を行なう」ということが行われる。これは いわゆるデータベース・システム(RDBMS)」の整列キーにキー文字列を格納しておけば済むことであり、辞書管理が楽になる。
もっとも、過去の印刷物としての“紙の”辞書ではこの点はそれほど気にされてはおらず、「あじ(味)<アジ(鯵)」なのに「アマ(「アマチュア」の略)<あま(尼・海女)」だったりもするので、もっぱらディジタルの辞書データの管理者のためのツールとしての役割が大きい。とはいえ辞書データの管理者の中には「見出し語をすべて暗記している」という人もいるので、「印刷された用語集を、アルバイトを大勢使ってデータに落とす」とかいった場合でもなければ、さほど出番がない。

理論[編集]

デフォルトソートキーは容易に生成できる[1]。工夫のしどころは「第二キーに相当するアトリビュート文字列をどう生成するか」である。
整列するデータの範囲が狭いと整列にかかるコストが節約できるという利点がある[2]ため、UNICODE であれば間に挟むのは「ぁ」でほぼ決まりである。「人間が見て違和感を感じない」という点に留意すると、アトリビュート文字列は五十音図の「行」と「段」に割り当りつけたほうが自然だろう(行は段に優先される)。そうなると「カタカナ<ひらがな」「清音<半濁音<濁音」「拗音・促音<平音」「短音<長音」といった形で割りつけてゆけばよい。
ひとつのやりかたとしては、「属性をひとつのかな文字(半濁点も濁点もつかない)に対応させて、「ア行:長音」「カ行:清音」「サ行:半濁音」「ダ行:濁音」とし、「あ段:カタカナ拗音・促音」「い段:ひらがな拗音・促音」「う段:カタカナ長音」「え段:ひらがな長音」などとする方法がある。
この方法によると「じしょじゅんせいれつ」は「ししよしゆんせいれつぁたかあたあかかかかか」となる[3]。このとき、「ぁ」は「いずれのひらがなよりもコードが小さい」ので、単純にコード順で整列すると短いもののほうが先に出る。
ただし、この処理を普通のコードに落とすとプログラムが冗長になるため、そこを簡潔に書けるかどうかはプログラマの腕の見せどころである。なお、「先頭に音引きがくる」といったケースは、見出し語を渡す前にチェックされたい[4]

脚注[編集]

  1. ただし、コードに落とすとなると文字列のパターンマッチングなどの手間があるため、綺麗に書こうとすると、それなりの工夫が必要ではある。
  2. たとえば、一万人分のテスト点数から各人の順位を出そうと思ったときに、真面目に整列すると手間がかかる。これに対して、0 から 100 の度数分布を求め、それを和分したのちに表引きによって順位を求めれば、おそらく一秒もかからない。
  3. はずである。各自試みられたい。
  4. なお、手元の資料によれば「1995/12/13」とあるが、1992年には動いていたので、三十年以上前からある古臭いアルゴリズムである。