POPFile で分かち書きに MeCab を使う場合の問題の回避策

前回書いた、HTML タグなどが分かち書きされてしまう問題についての回避策を見つけたので、メモ。
辞書の設定ファイル(char.def)において、文字種の定義が行われている部分(CODE(UCS2) TO CATEGORY MAPPING のところ)で、

# ASCII
0x0021..0x002F SYMBOL
0x0030..0x0039 NUMERIC
0x003A..0x0040 SYMBOL
0x0041..0x005A ALPHA
0x005B..0x0060 SYMBOL
0x0061..0x007A ALPHA
0x007B..0x007E SYMBOL

という部分がある。これらのカテゴリをすべて「ALPHA」に統一してしまうことにより、分割されてしまうことを防ぐことができる(もちろん、修正後、辞書を作り直してインストールする必要がある)。これがベストの対策かどうかはわからないが、少しテストしてみた限りでは問題はなさそうだ。
辞書を作り直すのが面倒という方のために、ここに上記修正を施して作った辞書を置いておく(文字コードはデフォルトの EUC_JP )。

分かち書きに MeCab を使うパッチを更新

分かち書きに MeCab を使うパッチを、MeCab 0.91、POPFile 0.22.4 に対応したものに更新した。(POPFile フォーラムへのポスト

前回からの主な変更点は、

  • MeCab 0.91 に対応(というか、0.8x では動かない)
  • POPFile 0.22.4 に対応
  • MeCab がインストールされていなければ Text::Kakasi を使うように
  • MeCab も Text::Kakasi もインストールされていなければ文字種ごとに分割(ただし漢字は 2 文字ごとに分割)するように

というところ。文字種ごとに分割する部分は、浅倉さんのkakasiなしで使うためのパッチを若干修正したものを取り込んでみた。

MeCab 0.91、mecab-perl (MeCab.pm) 0.91 がインストールされている必要があるが、若干の速度向上も見られるので興味のある方はどうぞ。使用する際には、上に書いたように辞書の編集をお忘れなく。

Kakasi に比べて大きな速度向上が見込めるのではないかと思っていたのだけれど、私の環境でテストした限りでは思ったほどの変化はないようだ。単純に分かち書き部分だけを比較すると、MeCab の方が 2 倍くらい速いのだが、POPFile でのメール処理全体で見ると 1 割速いくらいに薄められてしまう。精度面の影響も含めて、もう少し検証してみる必要がありそうだ。

CPAN に公開されている Text::MeCab というモジュールの方が MeCab.pm よりも速いということで気になっているのだけれど、分かち書きした結果だけを出力してくれるという機能はないようで、得られたノードの surface を順につないでいくという処理を書いたらかえって遅くなってしまった(当たり前か……)。私が見つけられていないだけかもしれないけれど、速く動くというのは非常に気になるところ。

上記パッチを Windows で使う場合

上記パッチを Windows で使うためには、MeCab (mecab-perl) や辞書をインストールする必要がある。インストール方法を簡単に。先に POPFile を終了させ、念のため POPFile とデータをバックアップしてから。

必要な環境は、

  • POPFile 0.22.4 (Windows 版)
  • ActivePerl 5.8.x (必ずしも必須というわけではない。インストールしない場合の方法は後述)

動作確認は、

準備するものは、

POPFile から MeCab が使用できるようにするため、Perl モジュールを POPFile/lib 以下にコピーする必要がある。具体的には、

のようにコピーする(デフォルトインストールの場合)。

さらに、上でダウンロードしたパッチをコピーする(念のため、元の MailParse.pm は MailParse.pm.ori などの名前に変更しておく)。

  • MailParse.pm → C:\Program Files\POPFile\Classifier\MailParse.pm

ActivePerl がインストールされていない場合は、ppm でダウンロードされるファイルを直接ダウンロード&展開し、上記と同様に POPFile/lib 以下のフォルダにコピーする。

POPFile を起動させる。
よくよく考えたら、MeCab がちゃんとインストールされていなくても(Text::Kakasi を使って)動作するようにしてしまったので、エラーなく動いても MeCab を使っているかどうか確認するすべがなかった……。気になる場合は、MailParse.pm の

print "Use Japanese parser : $self->{japanese_parser__}\n" if ( $self->{debug__} );

という部分を探して、if ( $self->{debug__} ) を消去して、POPFile Message Capture utility(msgcapture.exe)を使って「Use Japanese parser : mecab」という表示が出るかどうか確認を。

時間ができたら、パッチも含めたインストーラを作成するつもり。

今日のあまつぶむら2

化石掘りはあと 1 つから進展なし。
ハッピールームは 40000 点突破。
住人からもらったリンゴの木が育ったかもしれない。
6 月から「なつ」になったようで、新しい虫や魚が出現。ホタルはいい感じだけど、蚊はうざったい。
DS カテゴリを作ってみた。