ATOKのユーザ辞書をAnthyの個人辞書の形式に変換する。 検証に使用した際のバージョンは下記の通り。
- ATOK 2005
- Anthy 8700b
- kasumi 2.2
ATOKのユーザ辞書をテキスト形式で出力する
ATOK辞書ユーティリティを使用し、ユーザ辞書をテキスト形式で出力する。 ATOK辞書ユーティリティの「ツール」メニューから「単語・用例の一覧出力」を選択する。

適当に出力先のファイル名を設定して、「実行」ボタンを押す。 「種類」のところで、必要に応じて「登録単語」と「自動登録単語」を選択する。 また、後述のnkfにて文字コードを変換する場合は、「Unicodeで出力する」にチェックを入れなくてもOK。
nkfを用いて、出力した辞書ファイルの改行文字を変換しておく。
nkf -Lu -w atok-dic-org.txt > atok-dic.txt
辞書をAnthyのフォーマットに変換する
下記のようなスクリプトを使用し、出力したATOKのユーザ辞書をAnthyの個人辞書のフォーマット(cannadic形式)に変換する。
#!/usr/bin/perl
#
# Usage: atok2anthy.pl atoc-dic.txt > ~/.anthy/private_words_default
#
my %dictionary = ();
open( INPUT, "<$ARGV[0]" );
while ( <INPUT> )
{
# ATOK辞書ユーティリティで出力した辞書ファイルは「読み、単語、品詞」の
# 順番に並んでいて、区切り文字としてタブ文字が間に入る
#
# 例: しゃんはいありすげんがくだん[\t]上海アリス幻樂団[\t]固有名詞*
if ( $_ =~ /([^\t]+)\t([^\t]+)\t([^\t]+)(\*|\$)$/ ) {
my $reading = $1; # 読み
my $word = $2; # 単語
my $class = $3; # 品詞
# Anthyの品詞に相当する品詞に置き換え、辞書に追加する
if ( $class eq "独立語" or $class eq "単漢字" ) {
# ATOKの独立語・単漢字はAnthyの「単漢字」に変換する
$dictionary{$reading} = "#KJ*500 $word";
}
elsif ( $class eq "名詞サ変" or $class eq "名詞ザ変" ) {
# ATOKの名詞サ変・名詞ザ変はAnthyの「名詞 - する接続」に変換する
$dictionary{$reading} = "#T30*500 $word";
}
elsif ( $class eq "固有人名" ) {
# ATOKの固有人名はAnthyの「名詞 - 人名」に変換する
$dictionary{$reading} = "#JNM*500 $word";
}
elsif ( $class eq "名詞" or $class =~ /固有.*/ ) {
# ATOKの名詞、固有組織、固有地名等はAnthyの「名詞 - 一般名詞」に変換する
$dictionary{$reading} = "#T35*500 $word";
}
elsif ( $class eq "感動詞" ) {
# ATOKの感動詞はAnthyの「感動詞」に変換する
$dictionary{$reading} = "#CK*500 $word";
}
else {
# その他の品詞は(対応させるのが面倒なので)変換しない
print STDERR "unsupported class '$class' - $word\n";
}
}
else {
# コメント行・空行などは無視する
print STDERR "not match '$line'\n";
}
}
close( INPUT );
# 辞書を読みの順にソートして出力
foreach my $reading ( sort keys %dictionary ) {
print "$reading $dictionary{$reading}\n";
}
フォーマットを変換したら、~/.anthy/private_words_defaultという名前で保存する。 うまくいけば、個人辞書に登録した単語で変換出来るようになる。
登録されている単語が変換出来ない場合
Anthy辞書管理(kasumi)で一度個人辞書を開き、保存し直せばうまく変換出来るようになる。