SKK - skk-search-jisyo のハッシュテーブル版?

ハッシュテーブルを使うと高速になる上手い例 - 大量なデータを使う Elisp プログラムの例、が何かないかと考えていたら、我が愛用の elisp, skk を思い出した。これはデータも沢山あるし、もし本当に高速化されたら(遅くて困っているわけではないが)嬉しい。

軽く調べたことをメモ。skk はドキュメントが丁寧で素晴らしい。

  • SKK-JISYO.L は、辞書本体のファイル。私の環境では、174433 行、4Mバイト。

skk 利用時は、「 *SKK-JISYO.L*」バッファ(バッファ名の先頭にスペースがつく=誤って編集しないよになっている)に読み込まれた状態。

  • skk-search は変数 skk-search-prog-list の関数を順に使って eval することで辞書検索を行っている。
  • バッファーローカル変数 skk-henkan-key が検索する見出し語。
  • skk-search-jisyo-file が skk-search-jisyo-buf, さらに skk-search-jisyo を呼び出す。これが辞書を検索する関数。

辞書はソートされていることが重要。バイナリサーチとリニアサーチを組み合わせて検索する、と書かれてある。

この時点で、ハッシュテーブルにしたところであまり感動するほどの高速化は見込めない、と推測。
辞書自体はバッファーに読み込まれ済みだし、ソートされた辞書でかつ賢く検索されているし。

まあやってみるとすると、 skk-search-prog-list に追加できるような形でハッシュテーブルによる検索関数を書く、ことになる。

辞書のフォーマットを少し調べる必要あり。ややこしそうであれば、単に辞書データをデータとして使うことにする。
なお, skk は Daredevil SKK (ssk.el 1.375 版)。新しい版だとハッシュテーブルが使われているかもしれないがあえて探さないことにする。

続く。