辞書順

文字符号順比較は,単に文字符号を比較するだけなので,日本語を文字符号順比較で並べた場合,あまり好ましい結果は得られません。それに対して辞書順比較は,日本語の辞書や事典における自然な並びを実現したものです。

たとえばある辞書では,次のように見出しが並んでいます。

かっこ
かつご
がっこ
かっこう
かつごう
がっこう
かっこうあざみ
がっこうちゅう
カッコー
かっこく

このような順序で並べるには,文字符号順ではうまくいきません。辞書順で並べると,このように並べることができます。辞書順比較は,このように,主にかなによる「読み」を並べるためのものです。氏名などの読みを「おおの まんたろう」のように空白で区切って辞書順で並べると,姓と名の部分を別々に比較するので,うまく並べることができます。

わだ つよし
わだ なべ
わだ のりえ
わたなべ みちお
わだの りえ
わたり てつや

また,DBPro の辞書順では,英字その他の欧文文字,記号などについても大文字/小文字,全角/半角の区別を別グループとせず,それらの文字の大文字/小文字/全角文字/半角文字が隣り合うように並べられます。

漢字については,文字符号順比較と同じです。

辞書順比較について,より詳しくは文字列比較についてを参照してください。

関連項目

→比較式
→#辞書順比較

文字列比較について

DBPro で行なう文字列比較には,次の3通りがあります。

ここでは,これらについての専門的な解説と,それに付随する基本的な前提となる定義などを述べます。これらについて興味のない方は,読む必要はありません。

文字セット

DBProで扱う文字列に含まれる文字は,Windowsで扱えるシフトJISコードセットです。これらは次のよう大別されます。

半角文字(SBCS:Single Byte Character Set)
全角文字(DBCS:Double Byte Character Set)
外字(EUDC:End User Defined Character)

DBProは,多くの場面で文字をJISコードとしても扱っています。シフトJISコードの全角文字はすべてJISコードに変換されて解釈される必要があります。このとき,JISでは未定義のIBM拡張文字等の拡張コードは便宜的に 0x7F21 以降に変換されます(以降 0x〜 は十六進数を示します)。したがって,7ビット符号系のJISコードとしてはあり得ない最上位ビットが立つことがあります。この文字符号位置は,文字符号順比較において,文字の大小判定を簡単に行なうために選ばれました。DBProで扱う全角のJISコードは,次のような範囲となります。

217E
21xx 
4Fxx 
50xx 
7Exx 
7Fxx 
98xx 
第1水準
第2水準
拡張文字

半角文字は上位バイトに 0 を補うことによって全角文字と同等に扱います。半角文字は次のように分類されます。

制御文字0x00〜0x08,0x0E〜0x1F,0x7F
空白文字0x09〜0x0D,0x20,0xA0
記号0x21〜0x2F,0x3A〜0x40,0x5B〜0x60,0x7B〜0x7E,0xA1〜0xA5
数字0x30〜0x39
英大文字0x41〜0x5A
英小文字0x61〜0x7A
カタカナ0xA6〜0xDF

全角文字は次のように分類されます。(文字の名前はJISとは異なっているかも知れません)

空白文字0x2121
記号0x2122〜0x232F,0x2D21〜0x2D7E,0x7C71〜0x7C7E,0x9321〜0x933C
ただし以下の 10 文字を除く
0x212B゛濁点(a) (b)
0x212C゜半濁点(a) (b)
0x2133ヽカタカナ清音繰返し(b)
0x2134ヾカタカナ濁音繰返し(b)
0x2135ゝひらがな清音繰返し(a)
0x2136ゞひらがな濁音繰返し(a)
0x2137〃同じく記号(c)
0x2138仝同の別字(c)
0x2139々漢字繰返し(c)
0x213A〆しめ(c)
0x213B〇零(c)
0x213Cー長音(a) (b)
数字0x2330〜0x2339
英大文字0x2341〜0x235A
英小文字0x2361〜0x237A
ひらがな0x2421〜0x2473,および上の (a)
カタカナ0x2521〜0x2576,および上の (b)
ギリシャ大文字0x2621〜0x2638
ギリシャ小文字0x2641〜0x2658
キリール大文字0x2721〜0x2741
キリール小文字0x2751〜0x2771
罫線素片0x2821〜0x2840,0x2C24〜0x2C6F
漢字0x3021〜0x7C70,0x933D〜0x972C,および上の (c)
外字0x7F21〜0x927E

これらの分類に漏れている文字符号はすべて未定義文字であり,それらは制御文字と同等に扱われます。

文字符号順比較

文字符号順比較は,文字列に含まれるJISコードを単純に大小比較するだけです。したがって,半角は全角より小さい。

基本つづり順比較

基本つづり順比較とは,'き','ぎ','キ','キ' など,基本的なつづりとして同じ文字をすべて同一視して比較します。このために,与えられた文字列は前処理で基本つづり文字列に変換されます。
この基本つづり変換は次のように行なわれます。このとき,2.以降のすべての変換情報は保存されます。ただし,2.以降が,ここに示された順序で処理されるわけではありません。ほとんど同時に処理されてしまいます。

  1. 空白文字を削除する (制御文字は空白文字として扱う)。
  2. 半角をすべて全角に変換する。
    $→$
    5→5
    a→a
    チ→チ
  3. 英希露小文字を大文字に変換する。
    a→A
    q→Q
    θ→Θ
    д→Д
  4. 濁音,半濁音を清音に変換する。このとき,清音と濁点が分離しているようなものも1文字に扱われる。かなに後行していない濁点半濁点は,そのままでかな文字扱いとなる。
    ヂ →チ
    チ゛→チ
    ぱ →は
    は゜→は
    ヴ →ウ
    a゛→a゛
  5. 拗音,促音 ,小母音などを含む小かな文字を大文字に変換する。
    ぁ→あ
    ャ→ヤ
    ッ→ツ
    ヵ→カ
    ヶ→ケ
  6. カタカナはひらがなに変換する。(4) (5) の処理後ならば,変換できないカタカナはない (JIS ではカタカナの方がひらがなよりも文字が多い)。
    チ→ち
    ヨ→よ
  7. 長音を処理する。長音文字は1種 (ー) である。長音の直前が,促音,撥音以外のかな文字のときは,長音をその母音に変換する。撥音に続く長音は撥音に変換する。長音の直前が長音や繰返し記号によってかなに置き替わった場合も,同様に処理される。これら以外のときの長音は,そのままかな文字扱いとなる。
    まー →まあ
    あっー→あっー… (注1)
    んー →んん… (注2)
    かーー→かああ
    かゝー→かかあ
    漢ー →漢ー
    @ー →@ー
    (注1)
    促音に長音が適用できないのと同様に小書きの「ヵヶ」にも適用できない。「ヮ」には適用できる。
    (注2)
    撥音に長音を適用させるのは好ましくないかも知れないが,日常用いられているので採用した。同様に,「ゐゑを」にも長音が適用される。
  8. 繰返しを処理する。繰返し文字は5種 (ヽヾゝゞ々) あり,それらは,カタカナ,ひらがな,漢字に対して独立に存在するので,直前の文字がそれらに対応しない場合は,(6) により,ヽヾはゝゞに変換され,それ以外はそのままかな文字または漢字扱いとなる。さらに,かなの繰返し記号は,清音,濁音が別々である。濁音のないかなに対しての濁音繰返しはそのままかな文字扱いとなる。長音の直後の繰返しもかな文字扱いである。拗音や促音に対する繰返しも処理される。かなの清音繰返しの後に濁点や半濁点があった場合も可能ならば1文字として処理する。
    ケヽ →ケケ
    ケヽヽ →ケケケ
    ケゝ →ケゝ
    けヽ →けヽ
    けゞ →けげ
    げゝ →げけ
    げゝゞ →げけげ
    げゝゝ゛→げけげ
    げゝー →げけえ
    みゞ →みゞ
    みゝ゛ →みみ゛
    みゞー →みゞー
    別々 →別別
    別ゝ →別ゝ
    むーゝ →むうゝ
    はゝ゛ →はば
    はゞ゛ →はば゛
    はゝ゜ →はぱ
    はゝ゜ー→はぱあ
    かゝ゜ →かか゜
    んゝ →んん
    ぎょゝ →ぎょょ
    あっゝ →あっっ
    ☆ゝ →☆ゝ
  9. NEC選定IBM拡張文字(374文字)は,IBM拡張文字(388文字)のサブセットであり,字形が重複している。これをIBM拡張文字に変換する。また,NEC特殊文字(83文字)にも一部字形の重複が見られ,これも変換する。

これらの変換後に,文字を次の種類に分類します。異なる種類の文字間の比較では,上が小さく,下が大きいとみなされます。同じ種類内では基本つづり文字によって文字符号順で比較されます。

↑空白文字 (削除されてしまうので実際には現れない)
小罫線素片
|記号
|ギリシャ文字
|キリール文字
|数字
|英字
|かな文字
大漢字
↓外字

この順序は,次のような基本的な考えから決定されています。

辞書順比較

辞書順比較は,与えられた文字列から逐次単語切出しを行ない,切り出された単語ごとに基本つづり順比較を行なって大小を判定します。
単語切出しは,空白文字(制御文字を含む)が現れたとき,および基本つづり順比較で用いる文字種が変化した場所で行なわれます。ただし,連続する空白文字は区切りに使用された後,捨てられます。また,先行後行する空白も捨てられます。
単語に対する基本つづり順比較で等しかった場合,基本つづりへの変換過程の情報を加味して次の比較規則が,次の順序で独立に単語単位で適用されます。このとき,異なる種類に関する比較間での順序は無意味です。

清音 < 濁音 < 半濁音 (かな)
直音 < 拗音,促音,小母音,小書きかな文字 (かな)
大文字 < 小文字 (英希露文字)
ひらがな < カタカナ < 繰返し < 長音 (かな)
非繰返し < 繰返し (漢字)
全角文字 < 半角文字

これらで順序が確定できない場合は,さらに原文字列の文字符号順で比較されます。

注意:
これらの順序定義は,DBProで決めたものであって一般的に認められたものではありません。むしろ,国語学をはじめとして社会的に認められた順序というものは存在せず,市販の辞典などの間でも食い違いが多く見られます。
注意:
単語切出しがこのような単純な規則に則っているということは,辞書順比較が漢字かな混じり文を想定していないことを意味しています。つまり,「送る」とか「茅ヶ崎」などが途中で切れてしまうことに注意が必要です。
注意:
外字を漢字と異なる種類とみなすと,単語がそこで切れてしまいます。これによって,外字を漢字の拡張として用いている場合に,辞書順比較の結果が期待に背くことがあるかも知れません。