2004年11月06日

辞書「見出し語」検索の高速化

たとえばテキストファイルに落とした岩波国語辞典

ファイル(特に見出し語)の構造をみて、正規表現での検索パターンを考えます。

この辞書の場合は、見出し語「テキスト」だったら、

\x ^=*テ-?キ-?ス-?ト|^な
こんなパターンで検索すると、該当見出しが見つからなかった場合は「な」行の先頭で終了します。

次、とらじさんの cp.def を使って「あ〜わ」行それぞれの見出し語開始位置のオフセット情報をリストにします。

あ d:\ref\iwa_koku.dic ->00000
か d:\ref\iwa_koku.dic ->CD6A0
さ d:\ref\iwa_koku.dic ->2289B0
以下、略。

辞書ファイルを開くさい、「た」行の冒頭に直接飛んでそこから検索を開始すれば、見出し語「テキスト」が「た」行内にあるかどうかがすぐにわかります。

わたしが使ってるのはこんなマクロです。
(このままでは他の環境では使えないので、ご注意)

======== iwakoku.def ======== by - aja -
* M
89 ^\ "iwakoku"
?.
&s
(mb==0)?.
mx[+,ps[=pw,mp[,ro[+, ; pw 0
; &d&t
#G
; #U
#F #e #<
c=cd, ; c0
&10 ; pa0 pr0
"\x ^=*"
:a #d(ct<=1)??{ "-?" >a }
#> &?("%s",pa) #m ; pa1
d+, ; d0
#O "d:\ref\iwa_koku.dic" &?("%s",pr) #m(r>0)?{ d-,} ; pr1 d1
#c(vr==1)? >y
(d)?#C ; d2 今回開いたのなら閉じる
&m("Not found")>z

:y ky-,
:z
ro],mp],ps],mx],
&d.

10: ; pa pr
(c<'ぁ')?{ &Sh(pa," ") &Sh(pr," ->000000"). }
(c<'か')?{ &Sh(pa,"|^か") &Sh(pr," ->000000"). }
(c<'さ')?{ &Sh(pa,"|^さ") &Sh(pr," ->CD6A0"). }
(c<'た')?{ &Sh(pa,"|^た") &Sh(pr," ->2289B0"). }
(c<'な')?{ &Sh(pa,"|^な") &Sh(pr," ->37EA01"). }
(c<'は')?{ &Sh(pa,"|^は") &Sh(pr," ->45E0A9"). }
(c<'ま')?{ &Sh(pa,"|^ま") &Sh(pr," ->4AB708"). }
(c<'や')?{ &Sh(pa,"|^や") &Sh(pr," ->591B68"). }
(c<'ら')?{ &Sh(pa,"|^ら") &Sh(pr," ->5F53AC"). }
(c<'わ')?{ &Sh(pa,"|^わ") &Sh(pr," ->62FC9F"). }
(c<'ァ')?{ &Sh(pa,"|^あ") &Sh(pr," ->666C6F"). }
(c<'カ')?{ &Sh(pa,"|^か") &Sh(pr," ->000000"). }
(c<'サ')?{ &Sh(pa,"|^さ") &Sh(pr," ->CD6A0"). }
(c<'タ')?{ &Sh(pa,"|^た") &Sh(pr," ->2289B0"). }
(c<'ナ')?{ &Sh(pa,"|^な") &Sh(pr," ->37EA01"). }
(c<'ハ')?{ &Sh(pa,"|^は") &Sh(pr," ->45E0A9"). }
(c<'マ')?{ &Sh(pa,"|^ま") &Sh(pr," ->4AB708"). }
(c<'ヤ')?{ &Sh(pa,"|^や") &Sh(pr," ->591B68"). }
(c<'ラ')?{ &Sh(pa,"|^ら") &Sh(pr," ->5F53AC"). }
(c<'ワ')?{ &Sh(pa,"|^わ") &Sh(pr," ->62FC9F"). }
(c<'・')?{ &Sh(pa,"|") &Sh(pr," ->CD6A0"). } ;・は実際は8398h

*
======== End of iwakoku.def ========
以下、他の辞書の場合の検索パターン例。

\x ^-*テキスト|^な 新和英中辞典
\cx ^[+()]*text|^U1 新英和中辞典
\x ^=*テ・?キ・?ス・?ト|^な$ 広辞苑
さらに高速化したい場合は、

・辞書ファイルを分割する。
・「てき」→「てく」内だけを検索するように検索範囲を細分化する。
・Emmett さんが HTJ.def でやってるみたいに、 vzlog vz.env のしくみを使って、検索開始位置のファイル・オープンを高速化する。

などの方法が考えられると思います。

[ NIFTY SERVE 「FGAL・ドキュメント」 フォーラム (FGALDC) 15 番会議室に投稿した記事 (2004/10/23) を改稿]
posted by - あじゃ - at 03:42| Comment(0) | TrackBack(0) | Vz Editor DOS DOS窓 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック