ATOKのユーザ辞書をAnthyの個人辞書の形式に変換する。 検証に使用した際のバージョンは下記の通り。

§1 ATOKのユーザ辞書をテキスト形式で出力する

ATOK辞書ユーティリティを使用し、ユーザ辞書をテキスト形式で出力する。 ATOK辞書ユーティリティの「ツール」メニューから「単語・用例の一覧出力」を選択する。

atok.png

適当に出力先のファイル名を設定して、「実行」ボタンを押す。 「種類」のところで、必要に応じて「登録単語」と「自動登録単語」を選択する。 また、後述のnkfにて文字コードを変換する場合は、「Unicodeで出力する」にチェックを入れなくてもOK。

nkfを用いて、出力した辞書ファイルの改行文字を変換しておく。

nkf -Lu -w atok-dic-org.txt > atok-dic.txt

§2 辞書を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という名前で保存する。 うまくいけば、個人辞書に登録した単語で変換出来るようになる。

§3 登録されている単語が変換出来ない場合

Anthy辞書管理(kasumi)で一度個人辞書を開き、保存し直せばうまく変換出来るようになる。