Forums: users (Thread #7849)

Windows上で日本語メールを処理させるには? (2005-06-11 17:13 by Anonymous #14630)

はじめまして、水口と申します。 bsfilterには大変お世話になっています。

快調なのですが、もう少し快適にならないかと思い質問をさせて頂くことにしました。


WindowsXP + Meadow2.10 + Mew4.2 の環境で、Windowsバイナリ版の bsfilterw をローカルpopモードで使用していますが、気になるのは「始めてのパターンのSpamメールの識別率」が、日本語のメールが英語のものより低いことです。

直接の原因は jtokenizer がデフォルトの bigram になっている為で、他のアルゴリズムにすれば解決すると予想していますが、これはWindowsバイナリ版にもあてはまるでしょうか? あるいは、ruby 版に変えた方が良いのでしょうか?


まずは以前使用した経験のある kakasi を試してみました。 kakasi-2.3.4 の Windows版バイナリとソースのCygwin環境でのコンパイルと両方試してみましたが、うまく行きません。 例えばkakasiのWinバイナリをインストールして bsfilterw.exe を jtokenizer kakasi のモードで起動しようとしても、以下の内容の例外ダイアログが出て起動できません。

No such file to load -- kakasi

bsfilter:2813:in `require'
bsfilter:2813:in `get_options'
bsfilter:2918:in `setup'
bsfilter:3065

このとき、kakasi.dll は PATHで見えるところには置いています。(特に根拠の無い当てずっぽうです)


一方、使用するPCは Cygwin環境をフルインストールしている WindowsXP なので、ruby版の bsfilter も基本的には動きます。 しかし試そうとしたら、bsfilter以前に Ruby/kakasi のコンパイルでつまづいてしまいました。


という訳なので、まずは使用する bsfilter としては Windows版バイナリと ruby版のどちらが得策かのあたりから、アドバイスをお願いできますでしょうか?

Reply to #14630×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: Windows上で日本語メールを処理させるには? (2005-06-11 19:56 by nabeken #14631)

1.
win32用のRuby/kakasiはインストールされてますでしょうか。コンパイル済みバイナリを見つけられなかったので、動作するのかは試せてません。

2.
cygwinで、
kakasi本体は configure & make & make install
Ruby/KAKASIは ruby extconf.rb & make & make install
で普通に呼び出せることを確認しました。

3.
初めてのパターンのspamの認識率が悪いという問題にについては、私の直感ですが、tokenizerを変更しても改善しないと思います。

spam/hamの判定ではないのですが
http://nabeken.tdiary.net/20041214.html
という話もあります。

誤認識したメールに対して、
bsfilter.exe -d ...
を実行し、単語ごとのspam確率を表示して(EUCで出ます)、過去の学習に問題ないか確認する
もしくは
少し時間を割いて、積極的にspamデータベースを拡充してみるのがいいのではないかと思います。
http://nabeken.tdiary.net/20040410.html
や、
spam込みで公開されているMLアーカイブが使用できるはずです。
http://www.jp.freebsd.org/ml.html#FreeBSD-users-jp
Reply to #14630

Reply to #14631×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: Windows上で日本語メールを処理させるには? (2005-06-12 01:19 by Anonymous #14633)

水口です。 ありがとうございます。

教えて頂いた bsfilter.exe -d のおかげで、認識率が低い原因のひとつが判った様です。

保存していた Spamメールから X-Spam-Probability が不自然に低いものを選んで見てみたら、本文が SJIS でした。 (Meadow の自動判定は SJIS で、実際にも間違い無く SJIS でした)

このメールを bsfilter.exe -d (ファイル名) で見てみると、日本語文字が無い代りに不自然に短い ascii 文字の tokenizer が大量にありました。 (これは bsfilter 1.0.7 の結果です)
例えば I, E, u, i, ', p, t, v, A, B, I, I, V, h という 1文字の tokenizer です。 これらは、多分 SJIS 2バイト文字中の 第2バイトなんだと思います。

これと同じことは、popモードの bsfilterw.exe でも起っているんですよね? SJISと判定されるメッセージは SJISとして処理させる方法は無いんでしょうか?

これまでも popモードで判定された Spam-Probability が不自然に低い上に learn-spam しても再評価で spam と判定されないメッセージが時々あって気になっていましたが、SJIS だったのかも知れません。 これからは気をつけて観察しておきます。



一方、非Spamと誤判定される Spam の SJIS率はそんなに高くも無い気がします。

tokenizer 変更に成功しても認識率UP は疑問という点で多少がっかりしたことは否定できませんが、興味もあるので tokenizer 変更には引き続きトライしようと思います。

kakasi は現在てこずっている上に新聞種類判定にも bigram より成績が悪かったとのことなので、別のものにするかも知れません。


ところで、 Winバイナリの bsfilterw.exe は Ruby 不要ということなので、 Ruby/kakasi の有無は tokenizer kakasi の可否に無関係かと思ったのですが、私の勘違いだった訳ですね。

また、kakasi本体はご指摘のとおりの方法でインストールに成功しました。 Ruby/kakasiのWinバイナリが見付からないのも同じです。 ソースからコンパイルしようとすると、 Ruby/kakasi の make がエラーになるところが NABEYA さんと違うところです。 kakasi 本体を Winバイナリに差し替えてもやはり make ができません。 このところ、なぜか Cygwin binutils の最新版がダウンロードできないので、追及は後回しにしようかと思っています。 (Kakasi 本体をバイナリ版とソース版で交互に試したので、現象の整理からやり直す必要もあるのです)
Reply to #14630

Reply to #14633×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: Windows上で日本語メールを処理させるには? (2005-06-12 02:10 by nabeken #14635)

spamは、ISO-2022-JPと名乗りながら実際にはshift jisというのが多いので、ヘッダのcharset等は信用していません。nkfでの自動コード変換後にtokenizeしてます。基本的にはshift jisの規約違反のメールも正しくspam判定出来るはずです。ただ、日本語のメールか否かという判定はbsfilterでad hocにやっており、日本語と判断したもののみ、nkf、日本語tokenizerにかけています。unicodeの場合も日本語扱いです。

-d オプションにより、
lang ja char_ja
のように、どういう理由で何語と判断したか出ますので、それを教えて下さい。

lang C ...のように、日本語とは判断されていない表示が出る気がします。その場合は、実際のspamを見せてもらって検討したいと思います。

lang ja ...の場合はnkfの誤変換が考えられます。この場合の救済は難しいです。

bsfilter.exe, bsfilterw.exeはbsfilterからexerbで作ったバイナリですので、rubyインタープリタとbsfilterスクリプトが一緒になっているイメージです、おそらく。処理のアルゴリズムはどれも変りません。bsfilter.exeとbsfilterw.exeは、コンソールアプリか、windowsアプリ?かの違いだけです。
Reply to #14633

Reply to #14635×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: Windows上で日本語メールを処理させるには? (2005-06-19 00:17 by nabeken #14778)

サンプルを送って頂いたところ、言語の判定に問題があることが分かりましたので、revision 1.70.2.*で調整します。
Reply to #14635

Reply to #14778×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login