next up previous
: 5 tamago4/emacs のカスタマイズ(上級編) : cannaによる日本語入力 : 3 cannaによる日本語入力のカスタマイズ法(基本編)


4 canna辞書の強化

「cannaはお馬鹿さん」と良く言われるが、それは、canna標準の辞書が貧弱で あることの原因が大きい。元々の canna に付属するシステム辞書(iroha)は、 約4万語しか単語を持っていない。iroha では、例えば、「試料」「分光」 「分光器」「異方性」「等方性」などの単語もないため、これを使って、分光 学的な日本語文書を書くことは、不可能に近い。

市販の日本語入力ソフトに付随する辞書の単語数は、例えば、 Macintosh で古くから使われてきた EGbridge の場合、
http://www4.airnet.ne.jp/koabe/com_inet/im/feature.html によれば、 「メイン辞書=約27万語、地名人名辞書=28万3千語、医学辞書=15万4千語」 らしい。

canna 辞書を強化するプロジェクトが進行 中で、現在(2004.1)、14万語が収録されている。iroha辞書を、この成果物で ある、gcanna 辞書に入れ換えるだけで、上記の、「試料」...などの5つの単 語が変換可能になる。更に、インターネット上には、多くのフリーのかな漢字 変換辞書があるので、それらを利用することで、cannaの変換効率を上げるこ とができる。

ここで用いているスクリプトプログラムなどは、
http://www.stex.phys.tohoku.ac.jp/~ohba/misc/canna-util.tar.gz
にまとめてある。

4.1 強化したcanna辞書のインストール法

FreeBSDでは、ports の japanese/cannadic をインストールすればよい。 インストール後、

    /usr/local/share/doc/cannadic/README.FreeBSD
の指示にしたがって、dics.dir ファイルの変更などを行う必要がある。こ の辺りは、どのような辞書の場合も同じなので、次節の一般的な辞書ファイ ルの追加の方法を参照。

4.2 辞書ファイルのシステム辞書への追加方法

  1. テキスト辞書から、バイナリー辞書に変換

    ダウンロードした canna 用の辞書ファイルが、テキスト形式の場合は、 バイナリー辞書に変換する。テキスト形式の canna 用辞書は、*.t または、*.ctd の名前である。

    % mkbindic hoge.ctd (または、hoge.t)
    

    これで、hoge.cbd(バイナリー辞書本体) と hoge.cld(頻度ファイル) ができる。

  2. バイナリー辞書のシステム辞書への追加

    作成したバイナリー辞書を、canna の辞書 directory にコピーして、dics.dir ファイルに追加した辞書の情報を書き加える。これには、管理者権限が必要。

    	# cp foge.cbd /usr/local/share/canna/dic/canna/
    	# cp foge.cld /usr/local/share/canna/dic/canna/
    	# vi /usr/local/share/canna/dic/canna/dics.dir
    

    dics.dir は、

    	辞書のファイル名(その辞書の中の辞書名)  -辞書名---
    
    の形式である。canna のバイナリー辞書は、ひとつのファイルに複 数の辞書を持つことができるので、()内の情報は必要。テキスト辞書は、ひとつ の辞書しか持てないので、()内の名前は省略できる。()内の辞書の拡張子は、自 立語辞書は .mwd、付属語辞書は .swd になる。最後の -辞書名-- は、クライ アントから見たときの辞書名(lsdic したときに見える)である。また、バイナリー ファイルについては、辞書本体(.cbd)と頻度情報ファイル(.cld)の両方を書いて おく。頻度ファイルを書かないと、個人用頻度ファイルの作成(mkdic -fq)がで きないようだ。dics.dir ファイルの
    	fuzokugo.cbd(fuzokugo.swd)      -fuzokugo---
    	iroha.cbd(iroha.mwd)            -iroha---
    	iroha.cld(iroha.mwd)            -iroha---
    	iroha.cbd(bushu.mwd)            -bushu---
    	bushu.cld(bushu.mwd)            -bushu---
    	hojoswd.ctd(.swd)               -hojoswd---
    	....
    
    ここに、mkbindic でできたふたつのファイル(辞書本体と頻度ファイル)に 付いての記述、
    	hoge.cbd(hoge.mwd)            -hoge---
    	hoge.cld(hoge.mwd)            -hoge---
    
    を追加すれば良い。なお、canna の辞書ファイルのファイル名は、拡張子を除い て、アルファベット9文字までしか使えないようだ。それよりも長い名前を用い てもエラーは出さないが、lsdic しても現れないので注意が必要。

    以上の後で、cannaserver をリスタートする。

    	# /usr/local/etc/rc.d/canna.sh stop
    	# /usr/local/etc/rc.d/canna.sh start
    

  3. 個人の設定ファイルの変更

    以上の操作で、cannaserver は新しい辞書を使えるようになったが、実際に どの辞書を使うかは、ユーザー毎に選択可能である。一般ユーザーで、

    	% lsdic -a -cs cannaserverのホスト名
    

    で、新しく追加した辞書が見えるようになったはずである。これを使 えるようにするには、kinput2 と canna/mule では、 /.canna ファイルに

        (use-dictionary
          "fuzokugo"
          "hojomwd"
          ...
          "hoge" ; <= 追加
          :bushu "bushu"
          :user  "user"
        )
    

    を追加し、kinput2(または mule)を再起動。

    tagago4/emacs では、 /.eggrc ファイルに

         (canna-add-dict "hoge" nil)
    

    を加えれば良い。

4.3 フリーな辞書たち

以下の辞書には、canna 用だけでなく、その他の形式の辞書も含まれている。ダ ウンロードした辞書が、テキスト形式のものか、何らかの方法でテキスト形式に変 換できれば、canna形式の辞書に変換することができる。 他の形式の辞書から、canna形式に変換するためには、 各種辞書の形式ATOK辞書のcanna辞書への変換SKK辞書のcanna辞書への変換 を参照。また、UNIX上のフ リーの日本語入力システムのもう一つの巨頭である Wnn の辞書は、canna 辞書 との間で相互に変換可能になっている(Appendix参照)。

以下の辞書は基本的にはフリーなものであるが、再配布について条件を付けてい るものもあるので、それぞれの README ファイル等を参照すること。

郵便番号辞書

http://bonobo.gnome.gr.jp/~nakai/canna/
http://bonobo.gnome.gr.jp/~nakai/canna/zipcode-20021021.tar.bz2

これを入れると、``9808578'' という入力が、 ``宮城県仙台市青葉区荒巻字青葉2-1 東北大学 (理学部・薬学部等)`` と変換できるようになる。

物理用語集(AOK8用)

http://www.vector.co.jp/soft/data/writing/se039662.html
登録単語数: 9862

理化学辞書5.2(ATOK8用)

http://lsd.pharm.kyoto-u.ac.jp/dic/others/Chiku.html
登録単語数: 19443

ライフサイエンス辞書プロジェクト(Lsd3,canna用)

http://lsd.pharm.kyoto-u.ac.jp/index-J.html
登録単語数: 28691

天文・天文物理用語辞書(Wnn/canna用)

http://www.kwasan.kyoto-u.ac.jp/~tanuma/tanudic.html
登録単語数: 3418

地球物理辞書(Wnn,canna,ATOK,MS-IME)

http://www.chibutsu.org/jisho/
登録単語数: 5264

岩石学辞書(canna用)

http://www.vector.co.jp/soft/dl/data/writing/se125795.html
登録単語数: 1252

skk辞書

http://openlab.ring.gr.jp/skk/dic-ja.html
登録単語数: 約18万語 (どんどん増えている)

Canada式 医学用語変換辞書

http://spica.onh.go.jp/med_dic/
登録単語数: 約10万語

この他にも、 http://www.vector.co.jp/vpack/filearea/data/writing/dic/index.html には、多くの辞書がある。

4.4 各種形式辞書のcanna辞書への変換

いくつかのテキスト辞書の形式を以下に示す。

canna辞書

読み 品詞のコード 単語 の順に並んでいる(区切り文字はスペース)。

	 例)
	あーべるへんかん #T35 アーベル変換
	あぼがどろ #JN アボガドロ

ATOK辞書(S-JIS漢字コード)

読み、単語、品詞名 の順に並んでいる(区切り文字は、コンマ)。

	 例)
	あーべるへんかん、アーベル変換、一般名詞
	あぼがどろ、アボガドロ、固有人名

SKK辞書

読み /漢字1/漢字2/... と、一つの読みに対し、複数の漢字を書ける。 品詞の概念は基本的にはない。ただし、動詞や形容動詞など、送り仮名が活 用で変化するものに付いては、最後は子音のアルファベットで終わっ ている。

	 例)
	いじょう /以上/異常/≧/
	とk /溶/解/[け/溶/]/[き/解/]/

したがって、ATOK辞書をcanna辞書に変換するためには、ATOK の品詞名を canna の品詞コードに変換し、並び順を変え、区切り文字をコンマからスペー スに変えればよい。また、SKK辞書を変換するためには、読みと漢字を 1:1 に してから、動詞や形容動詞(アルファベットで終わっている読み)を取り除き、 残ったものを名詞として、並べればよい。以下で、変換のために用いているス クリプトは、 配布パッケージ に含まれている。

参考 ATOKやcannaの品詞情報
http://hp.vector.co.jp/authors/VA014135/fep2.htm
http://www.tanu.org/~sakane/doc/public/howto-canna.html

4.4.1 ATOK辞書のcanna辞書への変換

フリーな辞書たちの物理用語集(physics.lzh)を例にして、 手順を示す。

  1. 辞書のダウンロードと解凍

    http://www.vector.co.jp/soft/data/writing/se039662.html

    から、ダウンロードした physics.lzh を解凍する。

    	% lha -x physics.lzh
    

    これでできた、physics.txt が、変換したいテキスト辞書である。

  2. 辞書の変換

    	 % nkf -e < physics.txt > p.t
    

    まず、nkf -e を通して、EUCコードに変換。これで、半角カナは全角カナにな り、区切り文字は、"、"になった。 次に品詞を変換して、canna形式にする。

    	% perl atok2canna.pl < p.t > physics.t
    

    これでできた physics.t をmkbindic にかければ、 システムバイナリー辞書の出来上がり。

4.4.2 skk辞書のcanna辞書への変換

  1. skk 辞書をlist 形式に

    skk 辞書の、

       よみ /漢字1/漢字2/...
    

    の形式を、

       よみ 漢字1
       よみ 漢字2
      ...
    

    の形式の変換する。

       % skk2list SKK-JISYO.L > skk.1
    

    skk2list は、skk のパッケージに含まれている perl スクリプト。

  2. skk の動詞や形容動詞の単語などを除く。

    動詞や形容動詞を表す、

       わるs 悪
       わるk 悪
    

    や、接頭語や接尾語を表すと思われる、

       こ> 小
       こ> 故
      
       >あい 愛
       >あじ 味
    

    の単語を除く。

       % meishi < skk.1 > skk.2
    

  3. 残った単語を、名詞として、canna 辞書に変換する。

    残った単語の中には、人名や地名などが含まれているが、それらを区別する 方法がないので、すべて「名詞」として、変換する。

       % list2canna < skk.2 > skk.t
    

上記に使ったスクリプトは、すべて、
配布パッケージ に含まれている。

4.5 辞書をまとめる(マージ等の操作)

複数の辞書をシステム辞書に追加していくと、dics.dir は長くなり、 lsdic -a したときに表れる辞書名も多くなり、繁雑になる。また、異なっ た辞書には重複した単語も登録されているので、無駄が多い。そこで、ここで は、複数の辞書をひとつのまとめたり、追加する辞書から、すでに登録されて いる単語以外の単語だけを抜き出す方法を述べる。

  1. バイナリー辞書からテキスト辞書への変換

    以下の操作は、「読み 品詞コード 単語」形式のテキスト辞書を対 象としている。バイナリー辞書しかない場合に、テキスト形式辞書に変換 する必要がある。必要なプログラムは、すべて、cannaに付属しているもの で、/usr/local/bin/ 以下にある。

    1. バイナリー辞書の辞書名の表示

           % dpbindic gcanna.cbd
        
           dpxdic gcanna.cbd
           gcanna.mwd [ Thu Dec 18 19:49:25 2003 ] = 146230 + 90687
      

      これから、gcanna.cbd は、単語数146230/読みの数90687 の自立語辞書 (gcanna.mwd)だけからできていることがわかる。

    2. バイナリー辞書から、テキスト辞書を取り出す。

           % dpbindic gcanna.cbd  gcanna.mwd > gcanna.1
      

      これで、テキスト辞書が、gcanna.1にできる。

    3. 1行1単語に変換する。

      このファイル(gcanna.1)は、

            読み 品詞コード 単語1 単語2 ...
      

      となっているので、1行1単語に変換し、ついでに重複を除く。

           % splitword gcanna.1 | sort | uniq > gcanna.t
      

  2. 複数の辞書をまとめてひとつにする。

       % merge_tdic.pl dic.1 dic.2 dic.3 ... | sort | uniq > all.t
    

    dic1, dic2, ... は、「読み 品詞コード 単語」形式のテキストファイルに 形に変換しておく。ただし、skk 辞書は、人名も地名もすべて名詞として登 録されているので、それらは、sort | uniq しても、重複は除けない。

  3. 登録されていない単語だけを抜き出す。

    単純に辞書を追加していくと、すでに登録されているものが、重複して登録 されてしまう。そのためには、登録されていないものだけを抜き出す操作が 必要。GNU版 diff を使えば、ふたつのファイルに対して、最初のファイル だけにある行(-old-line-format)、ふたつめだけにある行 (-new-line-format)、両方にある行(-unchanged-line-format)を、それぞ れ出力することが簡単にできる。

    cannadicプロジェクトの gcanna.t(146230単語) と skk.t(162543単語) に 対して、

      % diff  --old-line-format="%L" --new-line-format=""\
        --unchanged-line-format="" gcanna.t skk.t > only-gcanna.t
    
      % diff  --old-line-format="" --new-line-format="%L"\
        --unchanged-line-format="" gcanna.t skk.t > only-skk.t
    
      % diff  --old-line-format="" --new-line-format=""\
        --unchanged-line-format="%L" gcanna.t skk.t > common.t
    

    を行うと、

       only-gcanna.t 106463
       onky-skk.t	122706
       common.t	 39794
    

    で、約4万語近くが重複していた(skk辞書は、すべての単語の品詞を名詞で 登録しているので、実際の重複はもっと多い)。gcanna がシステム辞書とし て、動いている場合は、only-skk.t をバイナリー辞書に変換して登録すれ ば良い。


next up previous
: 5 tamago4/emacs のカスタマイズ(上級編) : cannaによる日本語入力 : 3 cannaによる日本語入力のカスタマイズ法(基本編)