ATOKのユーザ辞書をAnthyの個人辞書の形式に変換する。 検証に使用した際のバージョンは下記の通り。
ATOK辞書ユーティリティを使用し、ユーザ辞書をテキスト形式で出力する。 ATOK辞書ユーティリティの「ツール」メニューから「単語・用例の一覧出力」を選択する。
適当に出力先のファイル名を設定して、「実行」ボタンを押す。 「種類」のところで、必要に応じて「登録単語」と「自動登録単語」を選択する。 また、後述のnkfにて文字コードを変換する場合は、「Unicodeで出力する」にチェックを入れなくてもOK。
nkfを用いて、出力した辞書ファイルの改行文字を変換しておく。
nkf -Lu -w atok-dic-org.txt > atok-dic.txtatok-dic.txt]]>
下記のようなスクリプトを使用し、出力した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 # my %dictionary = (); open( INPUT, "<$ARGV[0]" ); while ( ) { # 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という名前で保存する。 うまくいけば、個人辞書に登録した単語で変換出来るようになる。