SDIC辞書のインデキシングを最適化する

土曜日, 9月 06 2008 @ 05:50 午後 JST

投稿者: kazuhiro

とか書くと偉そうに聞こえますが、自作のコードで必要な部分だけのインデックスポイントを書きださせることで、インデックスのサイズを小さくするという話です。 既存のアイデアではありますが、こういうのはスクリプト言語でやった方が楽じゃないかなぁという事で、紹介します。

SDICを使ってSDIC形式の辞書を検索する時、SUFARY(あるいはSary)を使ってインデキシングを行うことで検索の高速化が可能になります。 しかし、速くなるのはいいのですが、mkary等でインデキシングを行うと元のSDIC辞書のおよそ3倍という、結構な大きさのインデックスファイルが必要になります。 SDIC形式な辞書の場合、コメントの部分や、タグや実体参照の途中等からマッチさせる必要はありません。というか、されるとうれしくありません。 ですので、この部分についてはインデックスポイントを出力しないようにしてみます。 これにより、インデックスのサイズがおよそ2割前後小さくなりました。 また、全文検索を捨てて検索語だけでインデックスを作ったり、後方一致検索も捨てることで更に小さくできます。

mkary 最適化 検索語のみ 前方一致検索のみ
gene.sdic.ary 9,591,548 7,754,864 3,007,944 229,480
jedict.sdic.ary 10,397,976 7,422,524 2,245,376 452,778

一応公開しておきます。使い方ですが

% perl sdic_dumpip.pl gene.sdic

の様に使います。検索語のみでインデックスを作成する場合は

% perl sdic_dumpip.pl --index=keyword gene.sdic

の様にしてください。前方一致検索用のインデックスを作成する場合は

% perl sdic_dumpip.pl --index=prefix gene.sdic

の様にしてください。いずれの場合でも書き出し後にmkary(あるいはmksary)によるインデックスのソートが必要です。

% mkary -so gene.sdic
% mksary -s gene.sdic

タグ:SDIC Lookup

(2008/09/08 追記) <K>以外のタグもスキップするように変更しました。

コメント (0件)


Kazuhiro's blog
http://ikazuhiro.s206.xrea.com/article.php/20080906175024981