 
これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドbogofilter-bdbです。
プログラム:
NAME
bogofilter-高速ベイジアンスパムフィルター
SYNOPSIS
ボゴフィルター [ヘルプオプション| 分類オプション| 登録オプション|
パラメータオプション| 情報オプション] [一般オプション] [設定ファイルオプション]
コラボレー
助けます オプション には次の値があります:
[-h] [--ヘルプ] [-V] [-Q]
分類 オプション には次の値があります:
[-p] [-e] [-t] [-T] [-u] [-H] [-M] [-b] [-B オブジェクト ...] [-R] [一般的なオプション]
[パラメータオプション] [設定ファイルオプション]
登録 オプション には次の値があります:
[-s | -n] [-S | -N] [一般的なオプション]
一般的な オプション には次の値があります:
[-NS ファイル名] [-CD DIR] [-k キャッシュサイズ] [-NS タグ] [-私 ファイル名] [-O ファイル名]
パラメーター オプション には次の値があります:
[-E value [、value]] [-NS value [、value] [、value]] [-O value [、value]]
info オプション には次の値があります:
[-v] [-y date] [-D] [-x フラグ]
設定 file オプション には次の値があります:
[-option = value]
注:使用 ボゴフィルター - 助けて オプションの完全なリストを表示します。
DESCRIPTION
Bogofilterは、ベイジアンスパムフィルターです。 通常の操作モードでは、電子メールが必要です
標準入力のメッセージまたはその他のテキストは、「良好」のリストに対して統計的チェックを行います
「悪い」単語で、メッセージがスパムかどうかを示すステータスコードを返します。
Bogofilterは高速アルゴリズムで設計されており、高速起動にBerkeleyDBを使用します。
ルックアップ、Cで直接コーディングされ、速度が調整されているため、
大量のメールを処理するサイト。
THEORY OF OPERATION
Bogofilterは、入力をトークンのバッグとして扱います。 各トークンはワードリストと照合され、
これは、非スパムメールとスパムメールで発生した回数のカウントを維持します。
これらの数値は、メッセージが
発生するトークンはスパムです。 これらを組み合わせて、メッセージがスパムかどうかを示します
彼。
この方法は、より一般的なパターンマッチングのアプローチと比較すると粗雑に聞こえますが、
非常に効果的であることが判明しました。 ポール・グレアムの論文 A 計画 スパム[1]をお勧めします
読書
このプログラムは、よりスマートな字句解析を行うことにより、Paulの提案を大幅に改善します。
Bogofilterは、適切なMIMEデコードと適切なHTML解析を行います。 特別な種類
ホスト名やIPアドレスなどのトークンは、認識機能としてではなく保持されます
分割。 日付やメッセージIDなどのさまざまな種類のMTAcruftは無視されます。
ワードリストを肥大化させる。 さまざまなヘッダーフィールドで見つかったトークンは、適切にマークされます。
もうXNUMXつの改善点は、このプログラムがGaryRobinsonの提案する変更を提供することです。
計算(以下のパラメーターrobxおよびrobsを参照)。 これらの変更は
ロビンソンの論文に記載されている スパム 検出[2]。
それ以来、ロビンソン(彼のLinuxJournalの記事を参照) A 統計的 アプローチ 〜へ スパム
問題[3])やその他の人々は、以下を使用して計算をさらに最適化できることに気づきました。
フィッシャーの方法。 別の 改善[4]を適用することにより、トークンの冗長性を補正します
実効サイズ係数(ESF)をスパムおよび非スパムの確率計算に分けます。
要するに、これはそれがどのように機能するかです:個人のスパム確率の推定
トークンは「逆カイ二乗関数」を使用して結合されます。 その値はどれほどひどいことを示しています
メッセージが独立した単語のランダムなコレクションであるという帰無仮説
以前の見積もりで与えられた確率は失敗します。 この関数は非常に敏感です
確率が小さい(ハミッシュな単語)が、確率が高い(スパミッシュな単語)ではありません。 それで
この値は、メッセージ内の強いハミッシュサインのみを示します。 現在、逆数を使用しています
トークンの確率、同じ計算が再度実行され、次のような指標が得られます。
メッセージは非常にスパムっぽく見えます。 最後に、これらXNUMXつの指標が差し引かれます(および
0-1間隔にスケーリングされます)。 兆候がある場合、この結合されたインジケーター(bogosity)は0に近くなります
ハミッシュメッセージの場合はスパムメッセージの場合よりも強力であり、
状況は逆です。 両方の兆候が等しく強い場合、値は次のようになります。
0.5近く。 これらのメッセージは明確な表示を与えていないため、トライステートモードがあります
bogofilterは、これらのメッセージを不明としてマークし、クリアメッセージはスパムとしてマークします
またはハム、それぞれ。 XNUMX状態モードでは、すべてのメッセージがスパムまたはハムとしてマークされます。
さまざまなパラメータがこれらの計算に影響を与えますが、最も重要なものは次のとおりです。
robx:これまでに見たことのないトークンに与えられたスコア。 robxは、
トークンはスパムです。
robs:robxの重みで、ほとんど見られないトークンの確率をrobxに移動します。
min-dev:計算で使用するトークンの.5からの最小距離。 トークンのみ
この値よりも0.5から離れた場所が使用されます。
スパムカットオフ:スコアが以上のメッセージはスパムとしてマークされます。
ham-cutoff:ゼロまたはspam-cutoffの場合、値がspam-cutoffを厳密に下回るすべてのメッセージ
ハムとしてマークされ、他のすべてはスパムとしてマークされます(XNUMXつの状態)。 それ以外の値は以下
ham-cutoffはhamとしてマークされ、ham-cutoffとの間の値を持つメッセージです。
スパムカットオフは不明としてマークされています。 残りはスパム(トライステート)
sp-esf:スパムの実効サイズ係数(ESF)。
ns-esf:非スパムのESF。 これらのESF値はデフォルトで1.0に設定されていますが、これはそうでない場合と同じです。
計算にESFを使用します。 ユーザーの電子メールの数に適した値は、
bogotuneプログラムの助けを借りて決定されます。
OPTIONS
ヘルプオプション
当学校区の -h オプションは、ヘルプメッセージを出力して終了します。
当学校区の -V オプションはバージョン番号を出力して終了します。
当学校区の -Q (クエリ)オプションは、bogofilterの構成、つまり登録パラメーターを出力します。
解析オプション、bogofilterディレクトリなど。
分類オプション
当学校区の -p (パススルー)オプションは、メッセージの最後にX-Bogosity行を付けてメッセージを出力します。
メッセージヘッダー。 これには、メッセージを読み取るときにメッセージ全体をメモリに保持する必要があります
stdin(またはパイプまたはソケットから)。 巻き戻すことができるファイルからメッセージを読み取った場合、
bogofilterはそれをもう一度読み取ります。
当学校区の -e (埋め込み)オプションは、メッセージが次の場合にコード0で終了するようにbogofilterに指示します。
分類されます。つまり、エラーがない場合です。 通常、bogofilterは異なるコードを使用します
スパム、ハム、および不明な分類ですが、これにより、procmailでbogofilterを使用することが簡単になります。
またはmaildrop。
当学校区の -t (簡潔)オプションは、省略されたスパムメッセージを出力するようにbogofilterに指示します
1文字とスコアが含まれています。 スパムは「Y」、ハムは「N」、不明は「N」で示されます。
「U」。 注:フォーマットは、構成ファイルを使用してカスタマイズできます。
当学校区の -T スクリプトが使用する不変の簡潔モードを提供します。 bogofilterは
1文字とスコアを含む省略されたスパムメッセージ。 スパムはで示されます
「S」、「H」のハム、「U」の不明。
当学校区の -TT スクリプトが使用する不変の簡潔モードを提供します。 Bogofilterは、
スコアを付けて、有効数字16桁で表示します。
当学校区の -u オプションは、メッセージをスパムとして分類した後、メッセージのテキストを登録するようにbogofilterに指示します
または非スパム。 スパムメッセージはスパムリストに登録され、非スパムメッセージは
グッドリスト。 分類が「不明」の場合、メッセージは登録されません。
事実上、このオプションはbogofilterを実行します -s or -n 必要に応じてフラグを立てます。 注意は
bogofilterが行う可能性のある分類エラーとして、この機能の使用を促します。
保存され、手動で修正されるまで蓄積されます -スン -NS オプション
組み合わせ。 このオプションにより、データベースが書き込みアクセス用に開かれることに注意してください。
ロックの競合と同期I / O操作により、大幅な速度低下が発生する可能性があります。
当学校区の -H オプションは、ヘッダーからトークンにタグを付けないようにbogofilterに指示します。 このオプションは
テストでは、通常の操作では使用しないでください。
当学校区の -M オプションは、入力をmbox形式のファイルとして処理するようにbogofilterに指示します。 の場合 -v or
-t オプションも指定されており、メッセージごとにスパム性の行が出力されます。
当学校区の -b (ストリーミングバルクモード)オプションは、bogofilterに複数のオブジェクトを分類するように指示します。
名前はstdinから読み取られます。 の場合 -v or -t オプションも指定され、bogofilterはを出力します
各ファイルのファイル名と分類情報を示す行。 これは代替手段です
〜へ -B コマンドラインにオブジェクトを一覧表示します。
このコンテキストでのオブジェクトは、maildir(自動検出)であるか、maildirでない場合は、
単一のメールでない限り -M 与えられます-その場合、mboxとして処理されます。 (コンテンツの長さ:
現在、ヘッダーは考慮されていません。)
mbox形式を読み取る場合、bogofilterはメールの後の空の行に依存します。 必要に応じて、
フォメール -es これが事実であることを保証します。
当学校区の -B オブジェクト ... (バルクモード)オプションは、bogofilterに名前の付いた複数のオブジェクトを分類するように指示します
コマンドラインで。 オブジェクトは、ファイル名(単一メッセージの場合)、メールボックス(ファイルの場合)です。
複数のメッセージを含む)、またはディレクトリ(maildirおよびMH形式)。 の場合 -v or -t オプション
も指定されている場合、bogofilterはファイル名と分類を示す行を出力します
各ファイルの情報。 これはに代わるものです -b stdin上のオブジェクトを一覧表示します。
当学校区の -R オプションは、標準でRデータフレームをテキスト形式で出力するようにbogofilterに指示します
出力。 詳細については、以下のRとの統合に関するセクションを参照してください。
登録オプション
当学校区の -s オプションは、スパムとして提示されたテキストを登録するようにbogofilterに指示します。 データベースは
存在しない場合に作成されます。
当学校区の -n オプションは、非スパムとして提示されたテキストを登録するようにbogofilterに指示します。
Bogofilterは、メッセージがXNUMX回登録されたかどうかを検出しません。 誤ってこれを行った場合、
トークン数は、本当に必要なものと対応するスパムスコアから1つ減ります
少しずれます。 ワードリストに多数のトークンとメッセージがある場合、これは
関係ありません。 問題 できる を使用して修正する -S オプションまたは -N オプションを選択します。
当学校区の -S オプションは、スパムと同じメッセージの以前の登録を取り消すようにbogofilterに指示します。
メッセージがスパムとして誤って入力された場合 -s or -u そしてあなたはそれを削除したいそして
非スパムとして入力し、使用する -スン。 場合 -S スパムとして登録されていないメッセージに使用され、
カウントは引き続き減少します。
当学校区の -N オプションは、bogofilterに同じメッセージの以前の登録を取り消すように指示します
非スパム。 メッセージが非スパムとして誤って入力された場合 -n or -u そしてあなたはしたい
それを削除してスパムとして入力してから、 -NS。 場合 -N されなかったメッセージに使用されます
非スパムとして登録された場合でも、カウントは減少します。
一般的なオプション
当学校区の -c ファイル名 オプションは、bogofilterにという名前の設定ファイルを読み取るように指示します。
当学校区の -C オプションは、bogofilterが構成ファイルを読み取らないようにします。
当学校区の -d DIR オプションを使用すると、データベースのディレクトリを設定できます。 環境を参照してください
他のディレクトリ設定オプションのセクション。
当学校区の -k キャッシュサイズ オプションは、BerkeleyDBサブシステムのキャッシュサイズを1単位で設定します
MiB(1,048,576バイト)。 キャッシュのサイズを適切に設定すると、bogofilterのパフォーマンスが向上します。 NS
推奨サイズは、データベースファイルのサイズのXNUMX分のXNUMXです。 あなたはbogotuneを実行することができます
推奨サイズを決定するためのスクリプト(チューニングディレクトリ内)。
当学校区の -l オプションは、bogofilterが実行されるたびにシステムログに情報行を書き込みます。
ログに記録される情報は、bogofilterの実行方法によって異なります。
当学校区の -L タグ オプションは、ログに記録される情報に含めることができるタグを構成します
を通じて、タンピングされたコーヒーベッドの上から均一にフィルターバスケットの内の粉に浸透していきます。 -l オプションですが、今のところ%l文字列を含むカスタムフォーマットが必要です。
このオプションは、 -l.
当学校区の -I ファイル名 オプションは、bogofilterに、指定されたファイルから入力を読み取るように指示します。
からより stdin.
当学校区の -O ファイル名 オプションは、パススルーモードで出力を書き込む場所をbogofilterに指示します。
これは、-pが明示的に指定されている場合にのみ機能することに注意してください。
パラメータオプション
当学校区の -E value [、value] オプションを使用すると、sp-esf値とns-esf値を設定できます。 XNUMXつで
sp-esfとns-esfの両方の値が設定されます。 値がXNUMXつだけ指定されている場合、パラメーターは次のように設定されます。
以下の注に記載されています。
当学校区の -m value [、value] [、value] オプションを使用すると、min-dev値を設定でき、オプションで、
robsとrobxの値。 XNUMXつの値を使用して、min-dev、robs、およびrobxがすべて設定されます。 少ない場合
値が与えられ、パラメータは以下の注で説明されているように設定されます。
当学校区の -o value [、value] オプションを使用すると、spam-cutoffham-cutoff値を設定できます。 XNUMXつで
値、spam-cutoffとham-cutoffの両方が設定されます。 値がXNUMXつだけ指定されている場合、パラメーター
以下の注記に記載されているように設定されます。
注:これらのオプションはすべて、提供する値を少なくすることができます。 値はスキップできます
カンマ区切り文字のみを使用します。この場合、対応するパラメーターは次のようになりません。
かわった。 最初の値のみが指定されている場合は、最初のパラメーターのみが設定されます。
末尾の値はスキップできます。その場合、対応するパラメーターはスキップされません。
かわった。 パラメータリスト内では、コンマの後にスペースを入れることはできません。
情報オプション
当学校区の -v オプションは、bogofilterによる入力の分析に関する標準出力へのレポートを生成します。
追加の各 v 出力の詳細度が最大4まで増加します。
-vv、レポートには、平均0.5の関連付けからの偏差が最も大きいトークンが一覧表示されます
スパムで。
オプション -y date トークンにタイムスタンプを付けるときに、現在の日付を上書きするために使用できます。 価値
ゼロ(0)の場合、タイムスタンプがオフになります。
当学校区の -D オプションは、デバッグ出力をstdoutにリダイレクトします。
当学校区の -x フラグ オプションを使用すると、デバッグ情報を出力するためのデバッグフラグを設定できます。 見る
使用可能なフラグのリストについては、ヘッダーファイルdebug.hを参照してください。
設定ファイルのオプション
GNUlongoptの使用 -- 構文、設定ファイルの 名前=値 ステートメントはコマンドラインになります
--option = value。 コマンドを使用する ボゴフィルター - 助けて オプションのリストについては、を参照してください。
それらの詳細については、bogofilter.cf.exampleを参照してください。 たとえば、X-Bogosityヘッダーを変更するには
「X-Spam-Header」に使用するには、次を使用します。
--spam-header-name = X-Spam-Header
ENVIRONMENT
Bogofilterは、構成ファイルで設定できるデータベースディレクトリを使用します。 設定されていない場合
そこで、bogofilterはの値を使用します BOGOFILTER_DIR。 両方をオーバーライドできます -d
DIR オプション。 それが利用できない場合、bogofilterはディレクトリ$ HOME /.bogofilterを使用します。
CONFIGURATION
bogofilterコマンドラインでは、bogofilterの方法を決定する多くのオプションを設定できます
動作します。 ファイル/etc/bogofilter.cfを使用して、ファイルに影響を与える追加のパラメーターを設定できます。
手術。 ファイル/etc/bogofilter.cf.exampleには、すべてのパラメーターのサンプルが含まれています。 状態
ロギングメッセージはサイトごとにカスタマイズできます。
リターン VALUES
スパムの場合は0。 非スパムの場合は1。 わからない場合は2; I / Oまたはその他のエラーの場合は3。
両方の場合 -p -e が使用される場合、戻り値は次のとおりです。スパムまたは非スパムの場合は0。 I / Oの場合は3または
その他のエラー。
エラー3は通常、bogofilterが起動時に読み取りたいワードリストファイルが
不足しているか、ハードディスクがいっぱいになっています -p モード。
統合 WITH その他 ツール
procmailで使用する
次のレシピ(a)bogofilterがスパムとして評価するものをスパムビンし、(b)登録する
スパムとして評価されたメッセージ内の単語、および(c)評価されたメッセージ内の単語を登録する
そのような非スパムとして。 これが適切な場所にあると、通常はユーザーにのみ必要になります
介入する( -NS or -スン)bogofilterが何かを誤って分類した場合。
#bogofilterでメールをフィルタリングし、Ham、Spam、またはUnsureのタグを付けます。
#そしてワードリストを更新する
:0fw
| | bogofilter -u -e -p
#bogofilterが失敗した場合、メールをキューに戻します。
#MTAは後で配信を再試行します
#75は、/ usr / include /sysexits.hのEX_TEMPFAILの値です。
:0e
{EXITCODE = 75ホスト}
#メールをspam-bogofilterに送信します(スパムの場合)。
:0:
* ^ X-Bogosity:スパム、tests = bogofilter
スパム-bogofilter
#メールをunsure-bogofilterに提出する
#ハムでもスパムでもない場合。
:0:
* ^ X-Bogosity:わからない、tests = bogofilter
わからない-bogofilter
#このレシピを使用すると、空の状態から始めてbogofilterをトレーニングできます
# 単語リスト。 不確かなフォルダを定期的にチェックしてください。
#メッセージを取り出し、ハム(またはスパム)として分類し、次の目的で使用します
#bogofilterをトレーニングします。
次のprocmailルールは、stdinでメールを受け取り、bogofilterの場合、ファイルスパムに保存します。
スパムだと思います:
:0HB:
*? bogofilter
スパム
この同様のルールは、次のようにメールにトークンを登録します。
bogofilter分類:
:0HB:
*? bogofilter -u
スパム
bogofilterが失敗した場合(3を返す)、メッセージは非スパムとして扱われます。
これはメールドロップ用で、メールを自動的に延期し、後で再試行します。
xfilterコマンドが失敗する場合は、これを使用してください 〜/ .mailfilter:
xfilter "bogofilter -u -e -p"
if(/ ^ X-Bogosity:Spam、tests = bogofilter /)
{
「spam-bogofilter」へ
}
次の.muttrc行は、メールをbogofilterにディスパッチするためのmuttマクロを作成します。
マクロインデックスd " 未設定のwait_key \ n \
bogofilter -n \ n \
wait_keyを設定します\ n \
「メッセージを非スパムとして削除する」
マクロインデックス\ ed " 未設定のwait_key \ n \
bogofilter -s \ n \
wait_keyを設定します\ n \
「メッセージをスパムとして削除する」
メールトランスポートエージェント(MTA)との統合
1. bogofilterをMTAに統合して、すべての受信メールをフィルタリングすることもできます。 ながら
特定の実装はMTAに依存し、一般的な手順は次のとおりです。
2.メールサーバーにbogofilterをインストールします
3.スパムおよび非スパムコーパスでbogofilterデータベースを準備します。 bogofilterは
より大きなコミュニティにサービスを提供するためには、代表的なセットでそれを準備することが重要です
メッセージの。
4.各メッセージでbogofilterを呼び出すようにMTAを設定します。 これはMTA固有ですが
ステップ、おそらく使用する必要があります -p, -u, -e オプション。
5.ユーザーがスパム/非スパムメッセージを登録し、修正するためのメカニズムを設定します
誤分類。 最も一般的な解決策は、エイリアスの電子メールアドレスを次のように設定することです。
どのユーザーがメッセージをバウンスするか。
6.詳細については、docおよびcontribディレクトリを参照してください。
Rを使用してbogofilterの計算を検証する
-Rオプションは、bogofilterにRデータフレームを生成するように指示します。 データフレームにはXNUMXつ含まれています
分析されたトークンごとの行。 このような各行には、データベースの「良好」の合計であるトークンが含まれています。
「スパム」カウント、「良好」カウントを非スパムメッセージの数で割ったもの
トレーニングデータベースを作成し、「スパム」数をスパムメッセージ数で割って、
トークンのロビンソンのf(w)、(1-f(w))とf(w)の自然対数、およびインジケーター
文字(+トークンのf(w)値が0.5からの最小偏差を超えた場合、-
しませんでした)。 表の最後に、ラベルを含む追加の行がXNUMXつあります。
トークンフィールドの後に、実際に使用された単語の数(+インジケーターが付いた単語)が続きます。
ロビンソンのP、Q、S、s、xの値と最小偏差。
Rデータフレームはファイルに保存し、後でRセッションに読み込むことができます(を参照)。 R
プロジェクト ウェブサイト[5]数学パッケージR)についての情報。 提供
bogofilterディストリビューションは、検証に使用できる単純なRスクリプト(ファイルbogo.R)です。
bogofilterの計算。 その使用方法の説明は、フォームのスクリプトに含まれています
コメントの。
LOG メッセージ
Bogofilterは、次の場合にメッセージをシステムログに書き込みます。 -l オプションが使用されます。 書かれていること
使用されている他のフラグによって異なります。
分類の実行により生成されます(ここでは日付とホスト部分は表示されていません)。
bogofilter [1412]:X-Bogosity:ハム、スパム性= 0.000227
bogofilter [1415]:X-Bogosity:スパム、スパム性= 0.998918
使い方 -u メッセージを分類してワードリストを更新すると、次のようになります(XNUMX行)。
bogofilter [1426]:X-Bogosity:スパム、スパム性= 0.998918、
レジスタ-s、329ワード、1メッセージ
単語の登録(-l -s, -n, -Sまたは -N)は以下を生成します:
bogofilter [1440]:レジスタ-n、255ワード、1メッセージ
登録の実行(を使用して -s, -n, -Nまたは -S)は次のようなメッセージを生成します:
bogofilter [17330]:レジスタ-n、574ワード、3メッセージ
bogofilter [6244]:register-s、1273ワード、4メッセージ
onworks.netサービスを使用してbogofilter-bdbをオンラインで使用する
 














