読者です 読者をやめる 読者になる 読者になる

ATOKユーザー辞書のデータをAnthyに入れてみた

「東方ATOK的なもの」Anthy用の辞書に変換して使ってみました。

以下、手順
1. http://www.geocities.jp/nagi_tindalos/DIC/Toho/Toho.html からATOK版「メイン辞書」「スペルカード」「旧作・幺樂団」の3つを入手

2. くっつけます

$ cat th-atok_ver5.1a.txt th-atok_spell_ver5.1a.txt th-atok_oldmusic_ver2.0c.txt > th-atok.txt

3. 文字コードUTF-8に、改行コードをLFに変換します。ついでにコメント行と空行も削ってしまひませう

$ nkf -w --overwrite th-atok.txt
$ sed -i -e 's/\r//' th-atok.txt
$ sed -i -e 's/^!.*$//' -e '/^$//d' th-atok.txt

4. 次にATOKユーザ辞書をAnthyの個人辞書形式に変換する の「辞書をAnthyのフォーマットに変換する」にあるperlスクリプトを使ひます
ただし、このスクリプトをそのまま使ふと、同じ読みの単語が消されてしまひ「@こうまきょう」のやうな変換が壊滅的なことになるので修正します。
例えばこんな感じ。

#!/usr/bin/perl

#
# Usage: atok2anthy.pl atoc-dic.txt > ~/.anthy/private_words_default
#
my %hinshi = (
    "独立語" => "KJ", #単漢字
    "単漢字" => "KJ", #単漢字
    "名詞サ変" => "T30", #名詞 - する接続
    "名詞ザ変" => "T30", #名詞 - する接続
    "固有人名" => "JNM", #名詞 - 人名
    "固有人他" => "JNM", #名詞 - 人名
    "固有人姓" => "JNM", #名詞 - 人名
    "固有地名" => "CN", #固有名詞 - 地名
    "固有一般" => "KK", #固有名詞 - その他
    "名詞" => "T35", #名詞 - 一般名詞
    "感動詞" => "CK", #感動詞
    "一段動詞" => "KS", #上下一段
    "サ行五段" => "S5", #サ行五段
    "ガ行五段" => "G5", #ガ行五段
    "形容詞" => "KY", #形容詞
);

open( INPUT, "<$ARGV[0]" );

while ( <INPUT> )
{
  # ATOK辞書ユーティリティで出力した辞書ファイルは「読み、単語、品詞」の
  # 順番に並んでいて、区切り文字としてタブ文字が間に入る
  #
  # 例: しゃんはいありすげんがくだん[\t]上海アリス幻樂団[\t]固有名詞*
  #
  # ※ この部分は東方ATOK辞書用に変へてゐます。正規表現と辞書を照らし合はせて察してください
  if ( $_ =~ /([^\t]+)\t([^\t]+)\t([^\t]+)(\t[^\t]+)?$/ ) {
    my $reading = $1; # 読み
    my $word = $2; # 単語
    my $class = $3; # 品詞

    # Anthyの品詞に相当する品詞に置き換え、辞書に追加する
    if ( exists( $hinshi{$class} ) ) {
      print "$reading #$hinshi{$class}*500 $word\n";
    }
    else {
      # その他の品詞は(対応させるのが面倒なので)変換しない
      print STDERR "unsupported class '$class' - $word ($reading)\n";
    }
  }
  else {
    # コメント行・空行などは無視する
    print STDERR "not match '$line'\n";
  }
}

close( INPUT );

perl弄ったの初めて。それっぽい感じに修正したらそれっぽく動いてくれたのでだいたい合ってゐるのでせうか…(^^;

ちなみに読みの順で並び替へる処理が削られてゐますが、「Anthy辞書管理」(kasumi) で一度開いて保存すれば勝手に並び替へられるので大丈夫です。(つまり手抜き

5. このスクリプトを実行します

$ ./atok2anthy.pl th-atok.txt > th-anthy.txt

6. Anthyで使用できない「読み」を削る
Anthyではひらがな以外の読みを登録することができません。「こいつ何当然のこと言ってんだ」と思ふかもしれませんが、この辞書の中には「めるらんぷりずむりばー」や「てぇりもいれおふぁぃせ」*1のような読みも登録されてゐます。Anthyではそのまま使ふことができないので、まとめて削ってしまひませう。*2

$ grep -v '^[^ ]*[abcdefghijklmnopqrstuvwxyz]' th-anthy.txt > tmp-dic
$ grep -v '^[^ ]*・' tmp-dic > tmp-dic2
$ mv tmp-dic2 th-anthy.txt; rm tmp-dic

7. ~/.anthy/private_words_default へコピー

$ cp th-anthy.txt ~/.anthy/private_words_default

8. 「Anthy辞書管理」(kasumi) で辞書を開いてみる
開いたら、そのまま「保存」をクリックします。ついでにエラーで追加されなかった単語を手動で追加してしまひます。

⑨. 完成!
お疲れさまでしたm(_ _)m

*1:「the Grimoire of Alice」と変換されるらしゐ

*2:さっきのスクリプトの中で該当行を消してしまへばよかったのにといふツッコミは無しの方向で…。