Manpages

名 前

procmailsc − procmail の 重 み つ き ス コ ア リ ン グ 手 法

書 式

[*] w^x 条 件 文

説 明

レ シ ピ に は 伝 統 的 な 真 偽 条 件 を 指 定 で き る が 、 そ れ に 加 え て マ ッ チ す る −− あ る い は マ ッ チ し な い −− 条 件 に 対 し て 、 重 み つ き ス コ ア リ ン グ 手 法 を 採 り 入 れ る こ と も で き る 。 レ シ ピ に 重 み つ き ス コ ア リ ン グ 手 法 を 使 う 場 合 、 あ る レ シ ピ が マ ッ チ す る と い う こ と は 、 そ の 最 終 ス コ ア は 必 ず 正 の 値 で あ る 。 そ の 条 件 に ’weight’ (重 み ) (w) 及 び ’exponent’ (指 数 ) (x) を 置 く こ と で 、 ス コ ア が 適 用 さ れ る 。 条 件 (の 同 一 行 )に

w^x を 前 置 す れ ば ス コ ア リ ン グ 手 法 を 適 用 で き る 。 但 し 、 w 及 び x は −2147483647.0 〜 2147483647.0 の 範 囲 内 (両 端 を 含 む )の 実 数 で あ る 。

重 み 付 き 正 規 表 現 条 件

最 初 に 正 規 表 現 を 見 つ け る と 、 ス コ ア に w を 加 算 す る 。 二 番 目 を 見 つ け る と 、 w*x を 加 算 す る 。 三 番 目 を 見 つ け る と 、 w*x*x を 加 算 す る 。 四 番 目 を 見 つ け る と 、 w*x*x*x を 加 算 す る 。 以 下 同 様 。 こ れ は 以 下 の 簡 単 な 公 式 で 記 述 で き る :

n
n k−1 x − 1
w * Sum x = w * −−−−−−−
k=1 x − 1 こ れ は 上 記 の 条 件 に お い て n 回 マ ッ チ す る 際 の ス コ ア の 合 計 を 表 す 。 以 下 の 場 合 は 区 別 さ れ る の で 注 意 さ れ た い :

x=0 最 初 の マ ッ チ の み が ス コ ア

w に 影 響 す る 。 後 続 の マ ッ チ は 無 視 さ れ

る 。

x=1 全 て の マ ッ チ は ス コ ア

w に 等 し く 影 響 す る 。 ス コ ア は マ ッ チ す る 度 毎

に そ の 数 に 比 例 し て 線 形 的 に 増 加 す る 。

0<x<1 全 て の マ ッ チ は そ れ 以 前 の ス コ ア に 対 し て よ り 少 な く 影 響 す る 。 ス コ ア は あ る 値 に 向 け て 漸 近 線 状 に 変 化 す る

(後 述 の 備 考 の 章 を 参 照 の こ と 。 )

1<x 全 て の マ ッ チ は そ れ 以 前 の ス コ ア に 対 し て よ り 多 く 影 響 す る 。 ス コ ア は 指 数 的 に 増 加 す る 。

x<0 奇 数 あ る い は 偶 数 番 目 の マ ッ チ を 与 え る の に 便 利 で あ る 。 正 規 表 現 が 否 定 さ れ た 場 合

(例 : マ ッ チ し な か っ た 場 合 )、 n は 明 ら か に 0 あ る い は 1と な る 。

重 み 付 き プ ロ グ ラ ム 条 件

プ ロ グ ラ ム が 正 常 終 了 の 結 果 と し て 終 了 コ ー ド EXIT_SUCCESS (=0) を 返 す 場 合 、 ス コ ア の 合 計 は w と な る 。 上 記 以 外 の (実 行 失 敗 を 示 す )終 了 コ ー ド を 返 す 場 合 、 ス コ ア の 合 計 は x と な る 。 プ ロ グ ラ ム の 終 了 コ ー ド が 否 定 さ れ る 場 合 、 終 了 コ ー ド は あ た か も マ ッ チ し た 数 で あ っ た か の 如 く 見 倣 さ れ る 。 そ し て 、 ス コ ア の 合 計 は 通 常 の 正 規 表 現 が n=’exitcode’ 回 数 マ ッ チ し た も の と し て 処 理 さ れ る 。

重 み 付 き 長 さ 条 件

現 在 の メ ー ル の 長 さ が M で あ る 場 合 :

* w^x > L と い う 条 件 式 は 以 下 の よ う な 式 で ス コ ア に 加 算 す る :

x
/ M \
w * | −−− |
\ L / ま た :

* w^x < L と い う 条 件 式 は 以 下 の よ う な 式 で ス コ ア に 加 算 す る :

x
/ L \
w * | −−− |
\ M / 両 者 共 、 L=M で あ れ ば ス コ ア に w を 加 算 す る 。 し か し な が ら 前 者 の 場 合 は 大 き い メ ー ル が 有 利 で あ り 、 後 者 の 場 合 は 小 さ い メ ー ル が 有 利 で あ る 。 x の 値 に よ っ て 関 数 の 勾 配 を 微 調 整 す る こ と が で き る が 、 典 型 的 に は x=1 で あ る 。

そ の 他

レ シ ピ の 全 て の 条 件 の 最 終 的 な 合 計 ス コ ア を 問 い 合 わ せ る に は 、 環 境 変 数 $= を 用 い る 。 こ の 変 数 は procmail が レ シ ピ 内 の 全 て の 条 件 を パ ー ス し た 後 は い つ で も 参 照 可 能 で あ る 。 (例 え レ シ ピ が 実 行 さ れ な か っ た と し て も 。 )

以 下 の レ シ ピ は 本 文 が 150行 以 上 の メ ー ル を 全 て 捨 て る 。 最 初 の 条 件 は 空 の 正 規 表 現 を 含 む 。 す な わ ち 、 こ の 条 件 は 全 て に マ ッ チ し 、 予 め ス コ ア に 負 の 値 の オ フ セ ッ ト を 与 え る 為 に 使 わ れ る 。 2番 目 の 条 件 は メ ー ル 中 の 全 て の 行 に マ ッ チ し 、 1行 毎 に +1ポ イ ン ト ず つ 加 算 す る こ と で 、 直 前 に 設 定 し て い た 負 の オ フ セ ッ ト 値 を 消 費 す る 。 最 後 の 条 件 で は 、 メ ー ル が 150行 以 上 で あ る 場 合 の み に ス コ ア が 正 の 値 に な る 。 : 0 Bh * −150^0 * 1^1 ^.*$ /dev/null あ な た が い つ も 真 っ 先 に 読 む 優 先 度 の 高 い フ ォ ル ダ が あ る と 仮 定 し よ う 。 次 の レ シ ピ は 重 要 度 の 高 い メ ー ル を 抜 き 出 し て 特 別 な フ ォ ル ダ に 放 り 込 む 。 最 初 の 条 件 は 定 型 的 な も の で あ り 、 ス コ ア に は 何 ら 作 用 し な い が 、 今 回 の ケ ー ス に お い て は こ の 条 件 が 満 た さ れ て い な け れ ば な ら な い 。 【 訳 注 : Precedence: 行 は 各 種 メ イ リ ン グ リ ス ト や vacation 等 の 自 動 応 答 ソ フ ト 等 、 人 手 を 介 さ な い 配 送 ソ フ ト が メ ー ル を 配 送 す る 際 に 付 加 し た り 、 配 送 す べ き か 否 か を 判 断 す る ヘ ッ ダ で あ る 。 】 こ れ 以 外 の 条 件 は 以 下 の よ う な 状 況 を 記 述 す る : John と Claire は い つ も 何 ら か の 重 要 な 発 言 を す る 。 会 議 は 大 概 重 要 で あ る 。 彼 ら に 対 す る 返 答 は や や 優 先 す る 。 Elvis に 関 す る メ ー ル (こ れ は あ く ま で も 単 な る 一 例 に 過 ぎ な い の で あ し か ら ず :−) は 優 先 す る (更 に 言 え ば 、 そ の メ ー ル は も っ と 優 先 す る が 、 Elvis に 割 り 当 て ら れ る 特 別 な ス コ ア は 、 彼 が ど れ ほ ど 頻 繁 に 言 及 し て も 、 最 大 4000 で あ る )。 沢 山 の 引 用 行 は 忌 み 嫌 わ れ 、 顔 マ ー ク は 評 価 さ れ る (こ れ ら の ス コ ア は 最 大 3500 に 達 す る )。 彼 ら 3人 は 通 常 は 興 味 深 い メ ー ル を 送 信 し な い し 、 短 い メ ー ル を 好 む は ず だ (例 え ば 、 2000バ イ ト の 長 い メ ー ル は ス コ ア を −100 、 4000バ イ ト の 長 い メ ー ル は ス コ ア を −800 減 じ る 。 )。 ご 覧 の 通 り 、 重 要 で な い 誰 か が メ ー ル を 送 信 す る と 、 ま だ 優 先 度 の 高 い フ ォ ル ダ に 格 納 さ れ る 機 会 が あ る 。 例 え ば 、 会 議 に 関 す る メ ー ル や 、 少 な く と も 2つ の 顔 マ ー ク を 含 ん で い る 場 合 で あ る 。 : 0 HB * !^Precedence:.*(junk|bulk) * 2000^0 ^From:.*(john@home|claire@work)
* 2000^0 ^Subject:.*meeting * 300^0 ^Subject:.*Re: * 1000^.75 elvis|presley
* −100^1 ^> * 350^.9 :−\) * −500^0 ^From:.*(boss|jane|henry)@work *
−100^3 > 2000 priority_folder 仮 に あ な た が メ イ リ ン グ リ ス ト に 加 入 し て 、 そ し て 良 質 の メ ー ル だ け を 読 み た け れ ば 、 以 下 の レ シ ピ が 目 的 に 適 う は ず だ 。 先 ず 、 当 該 メ ー ル が メ イ リ ン グ リ ス ト か ら の も の で あ る こ と を 確 認 す る 。 次 に 、 評 価 に 値 す る 意 見 を 述 べ る 重 要 人 物 か ら の メ ー ル で あ る か 、 あ る い は 確 実 に 全 て の 内 容 を 知 り た い 表 題 に 関 す る も の で あ る か を チ ェ ッ ク す る 。 も し そ う な ら ば 、 当 該 メ ー ル を 前 述 の フ ォ ル ダ へ フ ァ イ リ ン グ す る 。 さ も な く ば 、 引 用 行 と 原 文 行 の 比 率 が 最 大 1:2 で あ る か チ ェ ッ ク す る 。 も し こ の 比 率 を 越 え る も の で あ れ ば 、 当 該 メ ー ル を 捨 て る 。 こ れ ら の テ ス ト を 通 過 し た 全 て の メ ー ル は フ ァ イ リ ン グ す る 。 : 0
^From mailinglist−request [AT] some.where
{ :
0:

* ^(From:.*(paula|bill)|Subject:.*skiing)
mailinglist :
0 Bh
* 20^1 ^>
* −10^1 ^[^>]
/dev/null :
0:
mailinglist } 更 な る 実 例 は procmailex(5) を 参 照 さ れ た い 。

警 告

重 み の 順 番 に よ る 検 索 ス ピ ー ド を 高 速 化 さ せ る た め に 、 procmail の 内 部 egrep エ ン ジ ン は 常 に 最 左 の 最 短 の マ ッ チ を 探 す 。 た だ し 、 変 数 MATCH へ の 割 り 当 て を 【 訳 注 : \/に よ っ て 】 行 っ て い る 最 中 は 、 最 左 の 最 長 の マ ッ チ を 探 す 。 例 え ば 、 そ れ 自 身 に よ る 最 左 の 最 短 の マ ッ チ に 用 い る 正 規 表 現 は :

.* は 常 に 同 じ 点 で ゼ ロ 長 さ の 文 字 列 に マ ッ チ す る 。

.+ は 常 に

(勿 論 、 改 行 を 除 く )任 意 の 1文 字 に マ ッ チ す る 。

関 連 項 目

procmail(1), procmailrc(5), procmailex(5), sh(1), csh(1), egrep(1), grep(1),

バ グ

も し 、 長 さ 条 件 に お い て 、 指 定 し た x が オ ー バ フ ロ ー を 起 こ し た 場 合 、 procmail は 数 学 ラ イ ブ ラ リ の 関 数 pow(3) の な す が ま ま と な る 。

’工 学 ’フ ォ ー マ ッ ト の 浮 動 小 数 点 数 値 (例 : 12e5) は 認 め ら れ な い 。

そ の 他

’正 の 極 大 値 ’ (2147483647) に 到 達 す る と 、 直 ち に そ れ 以 降 の 重 み 付 け さ れ た 条 件 は 単 純 に 読 み 飛 ば さ れ る 。

’負 の 極 大 値 ’ (−2147483647) に 到 達 す る と 、 直 ち に そ れ 以 降 の 条 件 は ’マ ッ チ し な い も の ’ と し て 見 倣 さ れ 、 レ シ ピ は 早 々 に 終 了 す る 。

備 考

も し 、 正 規 表 現 重 み 付 け 公 式 0<x<1 に お い て 、 こ の 条 件 に お け る ス コ ア 加 算 の 総 和 は 漸 近 的 に 変 化 す る :

w
−−−−−−−
1 − x 最 大 値 の 半 分 に 至 る 為 に は 、

− ln 2
n = −−−−−−−−
ln x と い う マ ッ チ が 必 要 に な る 。

著 者

Stephen R. van den Berg

<srb [AT] cuci.nl>

Philip A. Guenther

<guenther [AT] sendmail.com>