詳細/全文一致検索のカスタマイズ

Top > 詳細 > 全文一致検索のカスタマイズ

全文一致検索において、漢字の異体字を同一視(包摂みたいなもの)する方法

とても面倒です。

  • 同一視する文字のグループと、代表となる文字を決めます。
    例えば、
    {鴎, 鸥, 鷗}、代表=鴎
    {万, 萬}、代表=万
    どの二つのグループも互いに素でなければなりません。
  • 代表となる文字以外と、代表となる文字の組を作ります
    鸥 鴎
    鷗 鴎
    萬 万
  • 各文字を、Unicodeのコードに変換します。
    9e25 9d0e
    9dd7 9d0e
    842c 4e07
  • 1列目で最も大きいコードを見つけます。
    この例なら、9e25。これを、MAXとします。
  • (0から数えて)MAX行あるファイルを作ります。
    (0から数えて)n行目は、先ほどの表の1列目に数 n が現れるなら、その対応する2列目の値、
    そうでなければ 0 にします。
    数は、0xで始めて16進法で記述するか、0で始めて8進法で記述するか、1-9で始めて10進法で記述します。
    16進法もしくは10進法で記述するとデバッグしやすいでしょう。混在させても構いません。
    各行は , (コンマ)で終えます。最後の行の後のコンマはあってもなくても構いません。
    /* ... */ 形式のコメントも入れられますが、コメント中に多バイト文字をいれられるかどうかは
    お使いの環境に依存します(gccはUTF-8には文句を言わないみたい、VC++はUTF-8だと文句を言いますが、結局は通してくれます)。
    例:
    (最初の行は0行目と数える)
    0,
    0,
    0,
    (0x842a行省略、次の行は(0から数えて 0x842c行目))
    0x4a07, /* 鸥 => 鴎 */
    ...
    (次の行は0x9dd7行目)
    0x9d0e,
    ...
    (次の行は0x9e25行目、普通に1から数えると0x9e26行目という事になる)
    0x9d0e,
  • このファイルを、eshk.hという名前で保存します。
  • eshk.hをおいたディレクトリをconfigureに伝えます。
    例えば、/tmp/eshk.h を作成したのだとすると、
    ./configure --with-eshkdir=/tmp; make; make install
  • itbの先頭で、eshkを有効にする事を指定します
    @title=test
    $ioptions=collapse-eshk
    i0
    #title=森鷗外
    b1森鷗外
    !森鷗外
  • 全文一致検索の問い合わせのオプションに、collapse-eshkを指定します
    <search options="collapse-eshk">
      <join><p>鴎外</p></join>
    </search>

おわり。

最終更新日: 2014-12-09 (火) 18:25:46 (840d)

このページをブックマーク:

このページのURL(コピペして利用下さい):

TOP