照合とは、文書情報を標準的な順序に整理することです。多くの照合システムは、数値順またはアルファベット順、あるいはそれらの拡張や組み合わせに基づいています。照合は、ほとんどのオフィスファイリングシステム、図書館の目録、参考図書の基本的な要素です。
照合は分類とは異なり、クラス自体に順序付けは必ずしも必要ではありません。ただし、クラスの順序が重要でない場合でも、クラスの識別子は順序付けられた集合の要素である可能性があり、ソートアルゴリズムによって項目をクラスごとに整理することができます。
厳密に言えば、照合方法は通常、ソートキーと呼ばれる一連の可能な識別子に対して全順序を定義し、その結果として情報項目の集合に対して全事前順序を生成します(同じ識別子を持つ項目は、定義された順序で配置されません)。
Unicode照合アルゴリズムのような照合アルゴリズムは、与えられた2つの文字列を比較し、どちらを先に記述するかを決定することで順序を定義します。このようにして順序が定義されると、ソートアルゴリズムを使用して、任意の数の項目からなるリストをその順序に並べ替えることができます。
照合の主な利点は、ユーザーがリスト内の要素を迅速かつ容易に検索したり、リストに存在しないことを確認したりできることです。自動システムでは、バイナリサーチアルゴリズムまたは補間サーチを使用してこれを実現できます。手動検索もほぼ同様の手順で実行できますが、多くの場合、無意識のうちに行われます。その他の利点としては、リストの最初または最後の要素(数値順に並べられたデータの場合に特に役立ちます)、あるいは指定された範囲内の要素(これも数値データの場合に役立ちます。また、アルファベット順に並べられたデータで、検索対象の項目の最初の数文字しか分からない場合にも役立ちます)を簡単に見つけることができる点が挙げられます。
数値を表す文字列は、それが表す数値の値に基づいてソートすることができます。例えば、「−4」、「2.5」、「10」、「89」、「30,000」などです。この方法をそのまま適用すると、文字列に対して部分的な順序しか得られない場合があります。なぜなら、異なる文字列が同じ数値を表すことがあるからです(「2」と「2.0」、あるいは科学的記数法を用いる場合の「2e3」と「2000」など)。
日付を表す文字列や、時系列順またはその他の自然な順序で並べることができるその他の項目についても、同様のアプローチが適用できる。
アルファベット順は、多くの照合システムの基礎となっており、そこでは情報項目は主にアルファベットの文字からなる文字列によって識別されます。文字列の順序付けは、対象となるアルファベットの文字に標準的な順序が存在することを前提としています。(このシステムは厳密な意味でのアルファベットに限定されるものではありません。例えばチェロキー語のように音節文字やアブギダを用いる言語でも、使用される記号に一定の順序があれば、同じ順序付け原理を用いることができます。)
2 つの文字列のどちらがアルファベット順で先に来るかを決定するには、まず最初の文字を比較します。最初の文字がアルファベット順で先に来る文字列が、アルファベット順で先に来ます。最初の文字が同じ場合は、2 番目の文字を比較し、順序が決定されるまでこれを繰り返します。(比較する文字がなくなった文字列が先に来るとみなされます。たとえば、「cart」は「carthorse」より前に来ます。)一連の文字列をアルファベット順に並べた結果として、最初の文字が同じ単語がグループ化され、そのグループ内で最初の 2 文字が同じ単語がグループ化され、以下同様に続きます。
大文字は通常、対応する小文字と同等に扱われます。(コンピュータシステムにおける別の扱いについては、下記の「自動照合」を参照してください。)
アルファベット順を使用する場合、特定の制限、複雑な問題、および特別な慣例が適用される場合があります。
いくつかの言語では、規則が時代とともに変化してきたため、古い辞書と現代の辞書では語順が異なる場合があります。さらに、語順は用途によっても異なります。例えば、ドイツ語の辞書と電話帳では、異なるアプローチが用いられています。
Hans Wehrのバイリンガル現代書き言葉アラビア語辞典などの一部のアラビア語辞書は、アラビア語をセム語の語根ごとにグループ化し、並べ替えます。[ 1 ]たとえば、kitāba ( كتابة '書く')、kitāb ( كتاب '本')、kātib ( كاتب '作家')、maktaba ( مكتبة '図書館')、maktab ( مكتب 'オフィス')、maktōb ( مكتوب「運命」、または「書かれた」) は、「書く」を表すトリリテラルルートk - t - b ( ك ت ب ) の下に集約されます。 [ 2 ]
もう一つの照合方法は、部首と画数による分類で、中国語の漢字や日本語の漢字など、何千もの記号が慣習的な順序付けを拒む非アルファベット文字体系に用いられます。このシステムでは、文字の共通構成要素が特定されます。これらは中国語や中国語から派生した表意文字体系では部首と呼ばれます。文字はまず主部首ごとにグループ化され、次に部首内の画数順に並べられます。明確な部首がない場合や部首が複数ある場合は、慣習によってどの部首を照合に用いるかが決定されます。例えば、中国語の「妈」(母)は、画数6の文字として、画数3の主部首「女」(女)の下に分類されます。
部首と画数によるシステムは、文字数が少なく、すべてが明確なアルファベットシステムに比べて扱いにくい。表意文字のどの要素が独立した部首を構成し、どの部首が主要な部首であるかという選択は明確ではない。そのため、表意文字言語では、部首と画数による順序付けに加えて、表意文字の音訳をアルファベット順に並べることが多い。例えば、漢字の「東京」は、これらの文字の慣習的な順序に従って、ひらがなの日本語の文字で「とうきょう」と綴ったものとして並べることができる。
さらに、漢字は画数に基づいて並べ替えることもできます。中華圏では、姓の画数順は、人名を階層構造なく記載する一部の公文書における慣例となっています。
情報がデジタルシステムに保存される場合、照合は自動化されたプロセスになる可能性があります。その場合、対象となるアプリケーションにとって満足のいく方法で情報をソートできる適切な照合アルゴリズムを実装する必要があります。多くの場合、目標は、前のセクションで説明した標準基準に従って、アルファベット順または数値順に並べることです。ただし、これらの基準のすべてを自動化するのは容易ではありません。[ 3 ]
最も単純な自動照合方式は、ASCIIコーディング (またはUnicodeなどの上位セット)のような文字セット内の記号の数値コードに基づいており、記号はコードの数値が昇順で並べられ、この順序はアルファベット順 (数学的には辞書順)の基本原則に従って文字列にも拡張されます。したがって、コンピュータ プログラムは、文字a、b、C、d、$ を$ 、 C 、 a 、 b 、 dの順に扱う可能性があります(対応する ASCII コードは、 $ = 36、a = 97、b = 98、C = 67、d = 100 です)。そのため、C、M、Zで始まる文字列は、小文字のa、bなどを含む文字列よりも前にソートされます。これは、 ASCII アルファベット順と呼ばれることもあります。これは、特に大文字が小文字より前に並ぶこと(そして場合によってはスペースやその他の非文字の扱い方)により、標準的なアルファベット順とは異なります。そのため、多くの場合、いくつかの変更が加えられて適用されます。最も明白な変更は、ASCII値を比較する前に大文字小文字を変換することです(歴史的な理由から、多くの場合大文字に変換されます[注1 ])。
多くの照合アルゴリズムでは、比較は文字の数値コードではなく、照合シーケンス(照合のために文字が来ると想定されるシーケンス)および、与えられたアプリケーションに適したその他の順序付け規則に基づいて行われます。これにより、問題の言語で使用されているアルファベット順の正しい規則を適用し、上記「アルファベット順」で述べたように、大文字と小文字が異なる文字、変更された文字、二重音字、特定の略語などを適切に処理することができます。詳細は「アルファベット順」の記事で説明しています。このようなアルゴリズムは非常に複雑になる可能性があり、テキストを複数回処理する必要があるかもしれません。[ 3 ]
しかし、アルゴリズムが複数の言語に対応する必要がある場合、問題は依然としてよく発生します。たとえば、ドイツ語の辞書ではökonomischという単語がoffenbarとolfaktorischの間にありますが、トルコ語の辞書ではoとöを異なる文字として扱い、oyun をöbürの前に置きます。
任意の標準Unicode記号で構成された文字列の集合を照合するための標準アルゴリズムは、Unicode照合アルゴリズムです。このアルゴリズムは、デフォルトの照合テーブルを調整することで、特定の言語に適した照合順序を使用するように変更できます。このような調整例のいくつかは、共通ロケールデータリポジトリにまとめられています。
アプリケーションによっては、項目を照合するために使用される文字列と、表示される識別子が異なる場合があります。たとえば、「シャイニング」は「シャイニング、ザ」(上記のアルファベット順を参照)のようにソートされるかもしれませんが、表示は「シャイニング」としたい場合もあるでしょう。このような場合、表示用と照合用の2組の文字列を保存できます。このように照合に使用される文字列は、ソートキーと呼ばれます。
テキストに埋め込まれた数字を、適切な数値順で並べ替えたい場合があります。たとえば、「図 7b」は「図 11a」より前に表示されますが、Unicodeでは「7」は「1」の後に来ます。これはローマ数字にも適用できます。整数のみをソートする限り、この動作を実現するのはそれほど難しくありませんが、ソート処理が著しく遅くなる可能性があります。たとえば、Microsoft Windows はファイル名をソートする際にこの動作を採用しています。この基本的なソート順序は、自然ソート順序と呼ばれます。
小数点を正しくソートするのは少し難しい。なぜなら、地域によって小数点記号が異なる場合があり、また、小数点として使用される文字が区切り文字としても使用される場合があるからだ(例:「Section 3.2.5」)。このような文字列をソートするための普遍的な答えはなく、ルールはアプリケーションによって異なる。
場合によっては、数字や文字は順序付けの基準としてではなく、既に順序付けられている項目にラベルを付ける手段として用いられます。例えば、ページ、セクション、章など、あるいはリストの項目などは、このようにして「番号付け」されることがよくあります。使用できるラベル付けの系列には、通常のアラビア数字(1、2、3、…)、ローマ数字(I、II、III、…またはi、ii、iii、…)、または文字(A、B、C、…またはa、b、c、…)などがあります。(リスト項目に番号を付けずに示す別の方法として、箇条書きを使用することもできます。)
アルファベットの文字を列挙に用いる場合、どの文字を用いるかについては、言語固有の慣習が存在する。例えば、ロシア語のЪとЬ(これらは表記上、直前の子音を修飾するためにのみ用いられる)は省略され、通常はЫ、Й、Ёも省略される。また、拡張ラテン文字を用いる多くの言語では、修飾された文字は列挙に用いられないことが多い。