名 前
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
Philip A. Guenther