Featured image of post 複数のSKK辞書をCDB形式でひとつにしてEmacsで利用する

複数のSKK辞書をCDB形式でひとつにしてEmacsで利用する

夏休みの時期になったこともあり、時間を作ってちょっとEmacsのSKK辞書設定を見直してみました。

ddskk

Emacsではddskkを利用しています。

Daredevil SKK (Simple Kana to Kanji conversion program) - GitHub - skk-dev/ddskk: Daredevil SKK (Simple Kana to Kanji conversion program)
GitHub - skk-dev/ddskk: Daredevil SKK (Simple Kana to Kanji conversion program)

メモリは十分余裕があること、取り回しがよいことから、基本的には辞書サーバーは利用せずに辞書ファイルを読み込むスタイルで利用しています。

初期導入のときの設定のまま、あまりカスタムせずに使っていました。

1
2
3
4
5
(setq skk-large-jisyo "~/.skk/ddskk/dic/SKK-JISYO.L")
(setq skk-extra-jisyo-file-list
    (list
     '("~/.skk/ddskk/dic/SKK-JISYO.JIS3_4" . euc-jisx0213)
     ))

特にEmacs上ではorg-roamによるノート作成などが多いため、それほど変換で困ることもなかったのですが、 メールやslackのメッセージの下書きをすることもあり、そういった際には人名を辞書登録することもしばしばありました。

SKKには基本辞書に加えて、専門辞書も豊富に用意されているため、上記の人名のケースなどではこれを利用すればUXの向上が見込めます。

SKK dictionary files gh-pages | dict

実直に行くなら skk-extra-jisyo-file-list に使いそうな専門辞書をリストアップして設定すればよいだけです。

しかしddskkではCDB形式のファイルを直接利用することができるため、せっかくなのでいくつかの辞書を統合したCDBファイルにしてしまおうと思います。

CDBファイルの作成

SKK辞書のリポジトリに、cdb形式の辞書を作成するためのMakefileターゲットが用意されています。

SKK dictionary. Contribute to skk-dev/dict development by creating an account on GitHub.
GitHub - skk-dev/dict: SKK dictionary

こちらのリポジトリをクローンしてきて、 make cdb すればSKK-JISYO.Lのcdbが作成できます。

ただし、Makefileが参照しているスクリプトはskktoolsにあるので、こちらもクローンしてきてMakefileの参照パスと合わせて適宜リネームなどを事前にする必要があります。

SKK dictionary maintenance tools. Contribute to skk-dev/skktools development by creating an account on GitHub.
GitHub - skk-dev/skktools: SKK dictionary maintenance tools

スクリプトはpython製のようなので、python3も必要に応じて用意しておきます。Nixならこんな感じで。

1
nix-shell -p python3

複数辞書の統合

自身の環境と統合したい辞書に合わせてMakefileをちょっと書き換えます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
--- a/Makefile
+++ b/Makefile
@@ -40,10 +40,11 @@ BIN_SRCS  = #PBinlineDB.pdb
 ALL_SRCS  = $(SRCS) $(BIN_SRCS) SKK-JISYO.wrong SKK-JISYO.L.unannotated
 # SKK-JISYO.L+ SKK-JISYO.L.taciturn SKK-JISYO.total

-PYTHON    = python
+PYTHON    = python3
 SKK2CDB   = skk2cdb.py -f
-CDB_SOURCE = ./SKK-JISYO.L
-CDB_TARGET = ./`basename $(CDB_SOURCE)`.cdb
+CDB_SOURCE = ./SKK-JISYO.L ./SKK-JISYO.jinmei ./SKK-JISYO.geo ./SKK-JISYO.station ./SKK-JISYO.propernoun
+CDB_TARGET = ./SKK-JISYO-MY.cdb

 clean:
        $(RM) *.gz* *~ `find . -name '*~'` `find . -name '.*~'` `find . -name '.#*'` \

上記では日常で使いそうな人名、地名、駅名とそれ以外の主な固有名詞をSKK-JISYO.Lと合わせて SKK-JISYO-MY.cdb という辞書ファイルを作成しています。

ddskkで利用する

後は作成したCDB辞書ファイルを指定するだけです。

1
(setq skk-cdb-large-jisyo "~/.skk/ddskk/SKK-JISYO-MY.cdb")

まとめ

複数のSKK辞書をひとつのCDBファイルにまとめてddskkから利用するよう改修してみました。

CDBなので高速ですし、これで人名や地名の変換も改善されたと思います。 台湾や沖縄のようなマニアックな辞書も、extraの方に入れておいてもいいかもしれないです。

メモリサイズは大きくなりましたが、現在のマシンスペックであればまず困らないと思います。 ちなみに作成した辞書サイズ自体は16MB程度でした。

しばらく利用して、改善の効果を感じてみたいと思います。

Built with Hugo
テーマ StackJimmy によって設計されています。