[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ほかの人たちは「削除ファイル」(kill files) を使いますが、こ こ Gnus タワーにいる私たちは削除よりもスコアの方が好きです。彼らとけんか をするよりは切り替えてしまう方がましでしょう。それらは完全に違うことをす るので、真っ直ぐに座って注意を払ってください!
すべての記事はディフォルトのスコ
ア (gnus-summary-default-score
) の値を持っていて、ディフォルトで
は 0 です。このスコアは対話的に、またはスコアファイル (score file) によっ
て、上げられるか下げられるかします。gnus-summary-mark-below
より
も低いスコアを持っている記事には既読の印が付きます。
Gnus は概略バッファーを作成する前に、現在のグループに適用されるどんな 「スコアファイル」も読み込みます。
現在の記事に基づいてスコアのエントリーを挿入する、複数の概略バッファーの 命令があります。例えば、Gnus に特定の表題の記事のスコアを下げたり上げた りするように求めることができます。
二種類のスコア・エントリーがあります: 永続的なものと一時的なものです。一 時的なスコア・エントリーは、自分自身で期限切れ消去するエントリーです。例 えば一週間以上使われていないエントリーは、スコアファイルの大きさを小さく しておくために静かに削除されます。
7.1 概略スコア命令 | ||
7.2 グループスコア命令 | ||
7.3 スコア変数 | ||
7.4 スコアファイル様式 | ||
7.5 スコアファイルの編集 | ||
7.6 適応スコア付け | Big Sister Gnus はあなたが何を読んだか知っている | |
7.7 ホームスコアファイル | ||
7.8 自分自身へのフォローアップ | 人があなたに返答したときに Gnus に気付かせる | |
7.9 他のヘッダーにスコアを付ける | ||
7.10 スコア付けの奥義 | ||
7.11 逆スコア | ||
7.12 グローバルスコアファイル | ||
7.13 消去ファイル | ||
7.14 消去ファイルの変換 | ||
7.15 上級スコア付け | ||
7.16 スコアを減衰させる |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
スコア・エントリーを変更するスコア命令は、実際に本当のスコアファイルを修 正するわけではありません。それはあまりに非効率です。Gnus は以前にロード されたスコアファイルのキャッシュを保持していて、その一つが「現在のスコア ファイルの連想リスト」だと見なされます。スコア命令は単にこのリストにエン トリーを挿入し、グループから出るときに、このリストは保存されます。
現在のスコアファイルは、実際にそのようなスコアファイルが存在しない場合で も、ディフォルトでグループのローカルスコアファイルになります。スコア命令 を何か他のスコアファイル (例えば ‘all.SCORE’) に挿入するには、まず このスコアファイルを現在のものにしなければなりません。
以下はスコアファイルを実際に変更しない、一般的なスコア命令です:
現在の記事のスコアを設定します (gnus-summary-set-score
)。
現在の記事のスコアを表示します (gnus-summary-current-score
)。
現在の記事に使われているすべてのスコア規則を表示しま
す (gnus-score-find-trace
)。*Score Trace*
バッファーにおい
て、現在の行のスコア規則に対応するスコアファイルを編集するに
は e を、スコアファイルの清書 (gnus-score-pretty-print
) と
編集を行なうためには f をタイプしてください。
スコアで使われている語のリストを表示しま
す (gnus-score-find-favourite-words
)。
現在の概略でスコアの処理を実行します (gnus-summay-rescore
)。
Gnus には内緒でスコアファイルをいじり回して、その効果を見たいときに役立
つでしょう。
違うスコアファイルを現在のものにしま
す (gnus-score-change-score-file
)。
現在のスコアファイルを編集します (gnus-score-edit-current-scores
)。
gnus-score-mode
バッファーが現れるしょ
う (see section スコアファイルの編集)。
スコアファイルを編集して、このスコアファイルを現在のものにしま
す (gnus-score-edit-file
)。
キャッシュされているスコアを捨てます (gnus-score-flush-cache
)。こ
れはスコアファイルを編集した後で役に立ちます。
視覚的に快適な方法でスコアファイルをカスタマイズしま
す (gnus-score-customize
)。
以下の命令はローカルスコアファイルを変更します:
スコアの入力を求めて、それよりも低いスコアのすべての記事に既読の印を付け
ます (gnus-score-set-mark-below
)。
スコアの入力を求めて、そのスコアより低いすべての記事を削除するためのスコ
ア規則を現在のスコアファイルに付け加えま
す (gnus-score-set-expunge-below
)。
スコア・エントリーを実際に作るためのキー操作は、非常に規則正しい様式にのっ とっているので、それらすべての (何百もある) 命令を列挙する必要は無いでしょ う。
著者 (author) の名前でスコアを付けます。
表題 (subject) の行でスコアを付けます。
Xref
行、すなわちクロスポスト行でスコアを付けます。
References
行でスコアを付けます。
日付 (date) でスコアを付けます。
行数 (number of lines) でスコアを付けます。
Messsage-ID
ヘッダーでスコアを付けます。
NNTP サーバーが追加のヘッダーのデータを overview で捕捉してい
れば、その「追加」のヘッダー (すなわち (gnus-extra-headers
に設定
されているもの) の一つでスコアを付けます。
フォローアップ (followup) でスコアを付けます—これは著者名と合致するか どうかを調べて、この著者へのフォローアップでスコアを加えます。(このキー を使うことは、‘ADAPT’ ファイルの生成をもたらします。)
記事の本文でスコアを付けます。
ヘッダーでスコアを付けます。
スレッドでスコアを付けます。(このキーを使うことは、‘ADAPT’ ファイル の生成をもたらします。)
文字列 (strings)
正確な (exact) 合致です。
文字列の一部の (substring) 合致です。
大雑把な (fuzzy) 合致です (see section ファジーな一致)。
正規表現 (regexp) の合致です。
日付 (date)
日付の前 (before) です。
日付の後 (after) です。
その日付です。
数値 (number)
数値より小さいものです。
数値と等しいものです。
数値より大きいものです。
一時的な (temporary) スコア・エントリーです。
永続的な (permanent) スコア・エントリーです。
ただちに (immediate) スコア付けを行ないます。
gnus-extra-headers
にある名前でなければなりません。
‘TAB’ による補完ができます。
そういうわけで、現在の著者への、正確な合致に基づいて、永続的なスコアを、 増やしたい、という場合のキーは I a e p です。表題への、文字列の一 部合致に基づいて、一時的なスコア・エントリーを作り、そのスコアを下げたい、 という場合のキーは L s s t です。ずいぶん簡単ですね。
ものごとを少し複雑にするためにショートカット・キーがあります。二番目か三 番目のキーに大文字を使うと、Gnus は残る一つか二つのキーにディフォルト値 を使います。ディフォルトは「文字列の一部」と「一時的」です。ですか ら I A は I a s t と同じで、I a R は I a r t と 同じです。
これらの関数は、数値接頭引数とシンボル接頭引数を受け付けま
す (see section シンボルの接頭引数)。数値接頭引数はどのくらい記事のスコアを下
げる (もしくは上げる) かを指定します。シンボル接頭引数 a
は、現在
のスコアファイルの代わりに ‘all.SCORE’ ファイルをその命令のために使
うことを指示します。
gnus-score-mimic-keymap
はこれらの命令がキーマップであるかのよう
に振る舞うかどうかを指定します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
残念ながら、まだたくさんはありません。
すべてのグループに適用される all.SCORE ファイルを編集します。
gnus-score-mode
のバッファーが現れるでしょう (see section スコアファイルの編集)。
何度もスコア連想リストを再読み込みすることを避けるために、Gnus はそれら
のキャッシュを保持しています。この命令はキャッシュを空っぽにしま
す (gnus-score-flush-cache
)。
以下のようなやり方で、コマンド行からスコア付けをすることができます:
& emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-batch-score |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
gnus-use-scoring
nil
であれば、Gnus はスコアファイルを調べず、一般的にはスコア関連
の仕事をまったくしません。これはディフォルトで t
です。
gnus-kill-killed
この変数が nil
であれば、Gnus はすでに削除 (kill) の処理を実行さ
れた記事に決してスコアファイルを適用しません。これはたくさんの時間を節約
する一方、削除ファイルをグループに適用していて、削除ファイルを変更し、もっ
と多くの記事を削除するためにそれを再実行しても、それは動作しないというこ
とにもなります。それをするためにはこの変数を t
にしなければなりま
せん。(これはディフォルトで t
です。)
gnus-kill-files-directory
すべての削除 (kill) とスコアのファイルはこのディレクトリーに格納されま
す。その値は、ディフォルトでは環境変数 SAVEDIR
によって初期化され
ます。ディフォルトは ‘~/News/’ です。
gnus-score-file-suffix
スコアファイルの名前を得るためにグループ名に加える接尾語です (ディフォル トは ‘SCORE’ です)。
gnus-score-uncacheable-files
通常すべてのスコアファイルは、スコアファイルの過剰な再読み込みを避けるた めにキャッシュされます。しかし、このために Emacs が大きく肥大化するかも しれません。そこで、再び必要とされそうもないスコアファイルを取り除くため にこの正規表現を使うことができます。‘all.SCORE’ のキャッシュをやめ てしまうのは間違った考えですが、 ‘comp.infosystems.www.authoring.misc.ADAPT’ をキャッシュしないのは 良い考えかもしれません。実際のところ、この変数のディフォルトは ‘ADAPT$’ で、適応スコアファイルはキャッシュされません。
gnus-save-score
もし本当に複雑なスコアファイルを持っていて、たくさんの一括 (batch) スコ
ア付けを行なうのであれば、この変数を t
に設定しても良いでしょう。
これは Gnus にスコアを ‘.newsrc.eld’ ファイルに保存させます。
これを t
に設定しないと、手動で付けたスコア (V s
(gnus-summary-set-score
) で設定したようなもの) は訪れたグループ群
を横切って保持されることはありません。
gnus-score-interactive-default-score
スコアを上げ/下げするために、すべての対話的スコア上げ/下げ命令によって使 われるスコアです。ディフォルトは 1000 で、過剰に思えるかもしれませんが、 適応スコア付けをするための十分な余地を確保するためです。手で入力したデー タを、適応スコア付けからの小さな変更で上書きされたくはないのです。
gnus-summary-default-score
記事のスコアのディフォルトで、ディフォルトでは 0 になっています。
gnus-summary-expunge-below
この変数より低いスコアを持つ記事は概略の行に表示されません。ディフォルト
は nil
で、どの記事も隠されないということです。これは各概略バッ
ファーにおけるローカル変数で、gnus-summary-mode-hook
によって設定
されなければなりません。
gnus-score-over-mark
ディフォルトのスコアより大きなスコアを持つ記事に対して (概略行の三桁目 で) 使われる印です。ディフォルトは ‘+’ です。
gnus-score-below-mark
ディフォルトのスコアより小さなスコアを持つ記事に対して (概略行の三桁目 で) 使われる印です。ディフォルトは ‘-’ です。
gnus-score-find-score-files-function
現在のグループのためのスコアファイルを見つけるために使われる関数です。こ の関数はグループ名を引数として呼ばれます。
あらかじめ定義されている使用可能な関数は:
gnus-score-find-single
グループ自身のスコアファイルだけを適用します。
gnus-score-find-bnews
すべての合致するスコアファイルを bnews 構文を使って適用します。これがディ フォルトです。例えば、現在のグループが ‘gnu.emacs.gnus’ ならば、 ‘gnu.all.SCORE’, ‘not.alt.SCORE’ と ‘gnu.all.SCORE’ がす べて適用されます。要するに、スコアファイル名 の ‘all’ が ‘.*’ に変換され、それから正規表現の合致がなされま す。
これは、すべてのグループに適用したいスコア・エントリーがいくつかある場合 は、それらのエントリーを ‘all.SCORE’ ファイルに入れるということです。
Gnus は、より一般的なスコアファイルを、より特定のスコアファイルより前に 適用しようとするものの、スコアファイルはややランダムな順番で適用されます。 これはスコアファイル名の要素の数を調べることによって行なわれま す—‘all’ 要素を取り除いて。
gnus-score-find-hierarchical
すべての親グループから、順にすべてのスコアファイルを適用します。これ は ‘all.SCORE’ のようなスコアファイルを持つことはできないけれど、 ‘SCORE’, ‘comp.SCORE’ および ‘comp.emacs.SCORE’ を、それ ぞれのサーバーに対して持つことができるということです。
この変数は関数のリストであることもできます。その場合、これらすべての関数 がグループ名を引数として呼ばれ、返されたすべてのスコアファイルのリストが 適用されます。これらの関数は、直接スコア連想リストのリストのリストを返す こともできます。その場合、それらのファイルでないスコア連想リストを返す関 数は、返される最後のスコアファイルがローカルスコアファイルであることを確 実にするために、おそらく「本当の」スコアファイル関数よりも前に置かれるべ きでしょう。ふぅ。
例えば、サーバーを特定しない全体スコアファイルを使って、階層的に (親グルー プから順に) スコア付けを行なうならば、次の値を使えば良いでしょう。
(list (lambda (group) ("all.SCORE")) 'gnus-score-find-hierarchical) |
gnus-score-expiry-days
この変数は、使われていないスコアファイルエントリーが期限切れ消去されるま
でに、どのくらいの日数が経過すべきかを指定します。この変数
が nil
であると、スコアファイルエントリーは削除されません。ディフォ
ルトは 7 です。
gnus-update-score-entry-dates
この変数が nil
でないと、一時的に合致したスコア・エントリーは日付
が更新されます。(これは Gnus が期限切れ消去を操作している方法です—すべ
ての合致しないエントリーは古くなりすぎるのに対して、合致するエントリーは
新鮮で若いままです。) しかし、この変数を nil
に設定すると、合致す
るエントリーでさえも古くなって、ああ、そう、あの冷酷な死神と直面すること
になるでしょう。
gnus-score-after-write-file-function
スコアファイルが書かれた直後に、その名前を引数として呼ばれる関数です。
gnus-score-thread-simplify
この変数が nil
でないと、記事の表題は表題でスコア付けを行なうため
に、スレッドと同じやり方で (現在
の gnus-simplify-subject-functions
の値に従って) 単純化されます。
スコア・エントリーが「文字列の一部への合致」か「正確な合致」を使っている
と、その合致もこのやり方で単純化されます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
スコアファイルは普通は単一の様式だけを含む emacs-lisp
ファイルで
す。無頓着な利用者はこれを編集しないでください。すべては概略バッファーか
ら変更することができます。
にもかかわらず、それを自分でいじってみたくなったのなら、例があります:
(("from" ("Lars Ingebrigtsen" -10000) ("Per Abrahamsen") ("larsi\\|lmi" -50000 nil R)) ("subject" ("Ding is Badd" nil 728373)) ("xref" ("alt.politics" -1000 728372 s)) ("lines" (2 -100 nil <)) (mark 0) (expunge -1000) (mark-and-expunge -10) (read-only nil) (orphan -10) (adapt t) (files "/hom/larsi/News/gnu.SCORE") (exclude-files "all.SCORE") (local (gnus-newsgroup-auto-expire t) (gnus-summary-make-false-root empty)) (eval (ding))) |
この例はたいていのスコアファイルの要素を説明しています。別のやり方につい ては、上級スコア付け を見てください。
これがとても Lisp コードのように見えるとしても、実際はここにあるものは何
も eval
(評価) されません。しかしこの様式を読み込むために Lisp リー
ダーが使われるので、意味的に有効でないとしても、文法的には正当なものです。
この連想リストでは六つのキーがサポートされています:
文字列 (STRING)
キーが文字列だったら、それは合致が実行されるヘッダーの名前です。スコア付
けはこれら八つのヘッダーだけで行なうことができます: From
,
Subject
, References
, Message-ID
, Xref
,
Lines
, Chars
および Date
です。これらのヘッダーに加
えて、Gnus に、記事全体を取得して記事のより大きな部分で合致を行なわせる
三つの文字列があります: Body
は記事の本文で合致を行ない、
Head
は記事のヘッダーで合致を行ない、All
は記事全体で合致
を行ないます。これら最後の三つのキーを使うと、グループに入る速度
を かなり 遅くしてしまうことに気を付けてください。スコアを付ける
ことができる最後の「ヘッダー」は Followup
です。これらのスコア・
エントリーは、これらのスコア・エントリーに合致する記事へのすべてのフォロー
アップのための追加が行なわれている、新しいスコア・エントリーに帰着するで
しょう。
このキーに続くのは任意の数のスコア・エントリーで、それぞれのスコア・エン トリーは一つから四つまでの要素を持ちます。
gnus-score-interactive-default-score
の
数値が使われます。ディフォルトは 1000 です。
たいていのヘッダー型のために、r
と R
(正規表現(regexp))、
s
と S
(文字列の一部(substring)) 型、e
と E
(正確な合致(exact match))、および w
(語の合致((word match)) 型が
あります。もしこの要素が無いと、Gnus は文字列の一部の合致が用いられるべ
きであると仮定します。R
, S
, E
は、合致が大文字と小
文字を区別する方法で行なわれる点で他のものと異なります。これらすべての一
文字型は、本当は regexp
, exact
, word
型の短縮形で、
この方が好みならば代わりに使うことができます。
overview ヘッダーの標準の文字列に的を絞って gnus-extra-headers
を
使っていれば、それらのヘッダーの値でスコアを付けることができます。この場
合スコア・エントリーの五番目の要素が、スコアを付けるヘッダーの名前になり
ます。NNTP サーバーが overview で ‘NNTP-Posting-Host’ を
捕捉しているならば、‘all.SCORE’ ファイルの以下のエントリーは、単一
のホストを起源とする spam の攻撃に対して有効です:
("111.222.333.444" -1000 nil s "NNTP-Posting-Host") |
これらの二つのヘッダーは別の合致の型を使います: <
, >
,
=
, >=
, <=
です。
これらの述語は
(PREDICATE HEADER MATCH) |
の評価が nil
ではない場合に真です。例えば、上級合
致 ("lines" 4 <)
(see section 上級スコア付け) は結果として以下の式
になります:
(< header-value 4) |
言い換えると、4 を合致として <
を Lines
で使っているときは、
記事が 4 行よりも少ないときにスコアが加算されるということです。(混乱して、
それが反対ではないかと考えがちです。でも、そうではないのです。私が思う
に。)
合致を Lines
で行なっていると、いくつかのバックエン
ド (nndir
のようなもの) は Lines
ヘッダーを作成しないので、
すべての記事が 0 行であるとして扱われてしまうことに気を付けてください。
これは、少しの行しかない記事のスコアを下げている場合に、変な結果を導くこ
とがあり得ます。
Date (日付) ヘッダーには三つのなんとなくばかげている合致の型があります:
before
, at
, after
です。私は本当にこれが役立つよう
な機会を想像できないのですが、この関数を提供しないのもなんとなくばかげて
います。そうした場合のためにあるのです。いつ必要になるかは誰にもわかりま
せん。転ばぬ先の杖。羹(あつもの)に懲りて膾(なます)を吹く。本をカバーで判
断してはいけません。初めてのデートでエッチしてはいけません。(しかし、私
は少なくとも一人、引用しますが、「この関数は欠かせないものであることがわ
かった」と言った人がいると聞いています。)
もっと役に立つ合致の型は「正規表現」です。それによって、日付の文字列に正
規表現を使って合致させることができます。日付はまず ISO8601 の短縮様
式 (compact format) に標準化されま
す—YYYYMMDDT
HHMMSS です。例えば、すべての年
の 4月1日に投稿されたすべての記事に合致させたいのであれば、合致文字列と
して ‘....0401.........’ を使うことができます。(日付は元々の標準時
で保存されているので、その記事が投稿された場所での 4月1日に投稿された記
事に合致することに注意してください。“Time zones”は家族全員の健全な楽し
みですね? (訳注: いくつかある“Time zones”というタイトルの曲のことを言っ
ているのかもしれません。))
これらの三つの合致のキーは From
ヘッダー (など) と同じ合致の型を
使います。
この合致のキーはやや特別で、それは From
ヘッダーに合致し、合致し
た記事だけでなくその記事へのすべてのフォローアップのスコアにも影響します。
これは例えば、あなた自身の記事へのフォローアップのスコアを増やしたり、良
く知られた問題児へのフォローアップ記事のスコアを下げたりするのに使われま
す。From
ヘッダーが使うのと同じ型の合致を使います。(この合致キー
を使うと、‘ADAPT’ ファイルを作ることになります。)
この合致キーは Followup
合致キーと同じ方針に沿って動作します。
Message-ID
x で始まっているスレッド (または副スレッド) にス
コアを付けたいのであれば、‘thread’ 合致を付け加えてください。これ
は Reference
ヘッダーに x を持つそれぞれの記事に、新し
い ‘thread’ 合致を追加します。(これらの新しい ‘thread’ 合致は
これらの合致する記事の Message-ID
を使います。) これはスレッドの
いくつかの記事が完全な References
ヘッダーを持っていなかったとし
ても、スレッド全体のスコアを上げ/下げできることを保証します。これを使う
と、スレッドの記事に決定的でないスコアが付くかもしれないということに注意
してください。(この合致キーを使うと、‘ADAPT’ ファイルを作ることにな
ります。)
mark
このエントリーの値は数値でなければなりません。この数値より低いスコアのど んな記事にも既読の印が付きます。
expunge
このエントリーの値は数値でなければなりません。この数値より低いスコアのど んな記事も概略バッファーから削除されます。
mark-and-expunge
このエントリーの値は数値でなければなりません。この数値より低いスコアのど んな記事にも既読の印が付き、概略バッファーから削除されます。
thread-mark-and-expunge
このエントリーの値は数値でなければなりません。スコアの総計がこの数値より
低いスレッドのすべての記事には既読の印が付き、概略バッファーから削除され
ます。gnus-thread-score-function
はスレッドのスコアの総計をどのよ
うに計算するかを指定します。
files
このエントリーの値は任意の数のファイル名でなければなりません。それらのファ イルもスコアファイルであるとみなされ、これがされたのと同じ方法で読み込ま れます。
exclude-files
このエントリーの手がかりは任意の数のファイル名でなければなりません。これ らのファイルが何らかの理由で普通は読み込まれるようになっていたとしても、 読み込まれません。
eval
このエントリーの値は eval
(評価) されます。この要素はグローバルス
コアファイルを扱っているときは無視されます。
read-only
読み込み専用スコアファイルは更新されたり保存されたりしません。グローバル スコアファイルはこのアトムを使用するべきです (see section グローバルスコアファイル)。(注意: 「グローバル」はここでは本当に「全体的」という意味です。 個人的なすべてのグループに適用するスコアファイルのことではありません。)
orphan
このエントリーの値は数値でなければなりません。親記事を持たない記事のスコ アにこの数値が加えられます。‘comp.lang.c’ のような流通量の多いニュー スグループを追いかけていると想像してください。おそらくほんの少しのスレッ ドだけを追いたいでしょう。さらに新しいスレッドは見たいでしょう。
以下の二つのスコアファイルエントリーによって、それをすることができます:
(orphan -500) (mark-and-expunge -100) |
最初にこのグループに入ったときは、新しいスレッドだけを見るでしょう。そう したら、興味を持ったスレッドのスコアを上げ (I T また は I S で)、残りを無視 (c y) してください。次にグループに入っ たときは、興味を持ったスレッドの新しい記事と、まったく新しいスレッドを見 ることになります。
すなわち orphan (孤児) スコアアトムは、普通のスコア規則では自動的に発見 できない、興味深いスレッドが少し存在しする、流通量が多いグループのために あります。
adapt
このエントリーは適応スコア付けを制御します。これが t
だったら、ディ
フォルトの適応スコア規則が使われます。ignore
だったら、このグルー
プでは適応スコア付けは行なわれません。もしリストだったら、そのリストが適
応スコア規則として用いられます。もしそれが存在しない
か t
や ignore
以外の何かだったら、ディフォルトの適応スコ
ア規則が使われます。たいていのグループで適応スコア付けを使いたいのであれ
ば、gnus-use-adaptive-scorint
を t
に設定し、適応スコア付
けをしたくないグループに (adapt ignore)
を挿入すればよいでしょう。
少しのグループでだけ適応スコアを行ないたいのであれば、
gnus-use-adaptive-scoring
を nil
に設定し、それを行ないた
いグループのスコアファイルに (adapt t)
を挿入しましょう。
adapt-file
すべての適応スコア・エントリーは、このエントリーによって名づけられたファ イルに入ります。さらにそれはグループに入るときにも適用されます。このアト ムは、多くのグループで同じ適応スコアファイルを用いることによって、複数の グループに一度に適応スコアを付けたいときに便利でしょう。
local
このエントリーの値は (var value)
の形式の対のリストで
なければなりません。それぞれの var は現在の概略バッファーでバッファー
ローカルになり、指定された値 (value) に設定されます。これは少し風
変わりですが、フックがあまり好きでないならば、いくつかのグループで変数を
設定するのに便利な方法です。value は評価されないことに注意してくだ
さい。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
普通はすべてのスコア命令を概略バッファーから発行しますが、手でそれらを編 集したくなることもあるかもしれないので、それのためのモードを用意していま す。
それは以下に列挙する命令を使えるように、少しカスタマイズしただけ
の emacs-lisp
モードです:
あなたが行なった変更を保存して概略バッファーに戻りま
す (gnus-score-edit-exit
)。
現在の日付を数値の様式で挿入します (gnus-score-edit-insert-date
)。
これはどのようなものだろうと考えているのなら、これは本当に日の数値です。
適応スコアファイルは整形されずに保存されます。もしこれらのファイルの一つ
を読むつもりなら、まず pretty print (整形して印字) したいでしょう。
この命令 (gnus-score-pretty-print
) がそれを行ないます。
このモードを使うには M-x gnus-score-mode とタイプしてください。
gnus-score-menu-hook
がスコアモードのバッファーで実行されます。
概略バッファーでは、V f、V e および V t のような命令で スコアファイルの編集を始めることができます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
これらのスコア付けはあなたを憂鬱にさせてしまうかもしれないので、Gnus に はこれらをすべて自動的に—まるで魔法でも使ったように作成する方法があり ます。いやむしろ、人工無能によって、という方が正確かな。
記事を読んだとき、記事に既読の印を付けたとき、あるいは記事を削除したとき
に、その印を残しておいてください。グループから出るときに、Gnus はそれら
の印の辺りを嗅ぎ回り、何の印を見つけたかに応じてスコア要素を追加します。
この機能
は gnus-use-adaptive-scoring
を t
か (line)
に設定
すると有効になります。もしスコアを、表題に現れる個別の単語をもとに適
応させたければ、この変数を (word)
に設定してください。両方の適応
方法を使いたければ、この変数を (word line)
に設定してください。
スコア付けの処理を完全に制御するため
に gnus-default-adaptive-score-alist
変数をカスタマイズしてくださ
い。例えば、こんな感じになるでしょう:
(setq gnus-default-adaptive-score-alist '((gnus-unread-mark) (gnus-ticked-mark (from 4)) (gnus-dormant-mark (from 5)) (gnus-del-mark (from -4) (subject -1)) (gnus-read-mark (from 4) (subject 2)) (gnus-expirable-mark (from -1) (subject -1)) (gnus-killed-mark (from -1) (subject -3)) (gnus-kill-file-mark) (gnus-ancient-mark) (gnus-low-score-mark) (gnus-catchup-mark (from -1) (subject -1)))) |
ご覧のように、この連想リストの各要素は、キーとして印 (変数名か「実際の」
印すなわち文字のいずれか) を持ちます。このキーの後には任意の数のヘッ
ダー/スコアの組が続きます。もしそのキーの後にヘッダー/スコアの組が一つも
なければ、そのキーが記事の印として付いている記事に対しては適応型スコア付
けは行なわれません。例えば上記の例では、gnus-unread-mark
が付いて
いる記事は、適応型スコア付けのエントリーを持ちません。
各記事は一つしか印を持ち得ないので、それぞれの記事にはこれらの規則のうち の一つだけが適用されます。
gnus-del-mark
を例に取りましょう—この連想リストでの意味は、この
印 (すなわち ‘e’ の印) が付いている記事はすべて、From
ヘッダー
をもとに -4 下げられ Subject
で -1 下げられるスコア・エントリーが
追加されます。これをあなたの偏見に合わせて変更してください。
もし 10 個の記事に同じ subject で gnus-del-mark
の印が付いていた
とすると、この印に対する規則は十回適用されます。それはつまり、そ
の subject は -1 の十倍のスコアを得ます。その値は、私が大きく誤解してい
ないかぎり -10 のはずです。
もし自動期限切れ消去 (メール) グループ (see section メールの期限切れ消去) があれば、 既読記事にはすべて ‘E’ 印が付けられます。これはおそらく適応型スコア 付けをちょっとばかりやりにくくするので、自動期限切れ消去と適応型スコア付 けは、一緒には現実にあまりうまくやっていけません。
スコアを付けられるヘッダーには from
, subject
,
message-id
, references
, xref
, lines
,
chars
および date
があります。さらに followup
にも
スコア付けができて、これは現在の記事の Message-ID
を使っ
て References
ヘッダーに合致、すなわちこれに続くスレッドに合致す
る適応型スコア・エントリーを作成します。
この機構を使うならば、ときどき記事を既読にしてしまう小さな変更を避けるた
めに、スコアファイルの mark
アトムを何か小さい値—ひょっとする
と -300 くらいに設定しておくべきです。
適応型スコア付けを一週間かそこら使ってくると、Gnus はそれ相応に調教され、 あなたが何も言わなくても、あなたの好きな投稿者を強調し、あまり好きではな い投稿者を消去するようになるはずです。
どのグループにおいて適応型スコア付けを作動させるかは、スコアファイ ル (see section スコアファイル様式) を使うことによって制御できます。またこれ を使って、違ったグループに対して違った規則を使うようにもできます。
適応型スコア・エントリーは、グループ名
に gnus-adaptive-file-suffix
を付加した名前のファイルに入れられま
す。ディフォルトは ‘ADAPT’ です。
適応型スコアファイルは巨大になり得るので、人の手で編集されることは想定さ
れていません。gnus-adaptive-pretty-print
が nil
(ディフォ
ルト) であると、それらのファイルは人に読めるような形式では書かれません。
適応型スコア付けを行なうときは、部分文字列一致やファジーな一致を行なった
方が、おそらくほとんどの場合において良い結果が得られるでしょう。しかし、
ヘッダーの一致する部分が短い場合、意図に反する動作をする可能性が大きいの
で、gnus-score-exact-adapt-limit
より短い長さしか一致しない場合は
完全一致が行なわれます。この変数が nil
であれば、この問題が起こら
ないように常に完全一致が行なわれます。
上で述べたように、個別の単語ででもヘッダー全体ででも適応を行なうことがで
きます。単語で適応を行なう場合には、それぞれの単語の事例が、ある印にどん
なスコアを加えるかを、gnus-default-adaptive-word-score-alist
変数
によって指定します。
(setq gnus-default-adaptive-word-score-alist `((,gnus-read-mark . 30) (,gnus-catchup-mark . -10) (,gnus-killed-mark . -20) (,gnus-del-mark . -15))) |
これがディフォルト値です。単語での適応を有効にすると、
gnus-read-mark
の印が付いている記事の表題に現れるすべての単語が、
スコアに 30 点追加するというスコア規則を生み出します。
gnus-default-ignored-adaptive-words
のリストに現れる単語は無視さ
れます。無視したい単語を追加したいときは、この変数ではな
く gnus-ignored-adaptive-words
リストの方を使ってください。
短い単語では適応型スコア付けを作動させるべきではないと思う人もいるでしょ
う。もしそうなら gnus-adaptive-word-length-limit
に整数を設定する
ことができ、この数値より短い単語は無視されます。この変数のディフォルト
は nil
です。
スコア付けが行なわれるとき、gnus-adaptive-word-syntax-table
が実
際に使われるシンタックステーブルです。これは標準シンタックステーブルと似
ていますが、数字を単語の構成要素ではない文字だと認識します。
もし gnus-adaptive-word-minimum
に数値が設定されていると、単語適
応型スコア付け処理において、記事のスコアがこの数値よりも小さくなることは
ありません。ディフォルトは nil
です。
gnus-acaptive-word-no-group-words
が t
に設定されていると、
Gnus はグループ名のすべての語について、単語適応型スコア付けをしません。
ほとんどの表題が ‘emacs’ という語を含んでい
る ‘comp.editors.emacs’ のようなグループで便利です。
この機構をしばらく使ってみた後で、規則を解析することによってあなたがどん
な単語が好きでどんな単語が嫌いかを診断す
る gnus-psychoanalyze-user
(利用者精神分析命令) を書いてみると良
いかもしれません。いや、良くないかな。
単語適応型スコア付けは高度に実験的なものなので、将来変更されるであろうこ とは心に留めておいてください。第一印象では、これは現状ではまったく使い物 にならないように思えます。これをもっと使えるようにするためには、(より厳 密な統計的手法を巻き込んで) さらなる作業が行なわれる必要があるでしょう。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
新しいスコアファイルエントリーが入れられるスコアファイルは、ホームスコア ファイル home score file と呼ばれます。これは通常 (ディフォルト で) そのグループ自身のためのスコアファイルになります。例え ば ‘gnu.emacs.gnus’ 用のホームスコアファイル は ‘gnu.emacs.gnus.SCORE’ です。
しかしながら、これはあなたのお望みではないかもしれません。たくさんのグルー プの間で共通のホームスコアファイルを共有することはしばしば便利です—例 えばすべての ‘emacs’ グループが、ことによると同じホームスコアファイ ルを使うことができます。
これを制御する変数が gnus-home-score-file
です。これは以下の値を
取り得ます:
(regexp file-name)
。regexp がグループ名に合致す
ると、file-name がホームスコアファイルとして使用されます。
nil
以外を返せば、その戻り値がホームスコアファイ
ルとして使用されます。グループ名が引数として関数に渡されます。
このリストは、合致するものを探すために先頭から終りに向かってなぞられます。
というわけで、単一のスコアファイルだけを使いたい場合は、以下のようにすれ ば良いでしょう:
(setq gnus-home-score-file "my-total-score-file.SCORE") |
すべての ‘gnu’ グループに対して ‘gnu.SCORE’ を、すべて の ‘rec’ グループに対して ‘rec.SCORE’ (等々) を使いたい場合は、 このように設定することができます:
(setq gnus-home-score-file 'gnus-hierarchial-home-score-file) |
これは利用者の便宜のために、あらかじめ提供されている関数です。他に以下の 関数があります:
gnus-current-home-score-file
「現在の」標準スコアファイルを返します。これはスコア命令群に「最深」の合 致するスコアファイルにエントリーを加えさせます。
‘emacs’ グループ用に一つのスコアファイルを、それとは別のもの を ‘comp’ グループ用に用意する一方、他のすべてのグループではそれぞ れ独自のスコアファイルを使うようにしたいなら、こんな設定で良いでしょう:
(setq gnus-home-score-file
;; 正規表現 |
gnus-home-adapt-file
は gnus-home-score-file
とまったく同
じやり方で動作しますが、代わりにこれで、何をホーム適応スコアファイルにす
るかを指定します。すべての新しい適応ファイルエントリーは、この変数で指定
されるファイルに入れられ、同じ文法を使うことができます。
gnus-home-score-file
と gnus-home-adapt-file
を使うことに
加えて、グループパラメーター (see section グループパラメーター) とトピックパラメー
ター (see section トピックパラメーター) を使っても、ほぼ同様のことを成し遂げるこ
とができます。グループ、トピックパラメーターはこの変数よりも優先されます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Gnus は現在のバッファーから Message-ID
ヘッダーを見つけ出すための
二つの命令を提供します。そして Gnus は、他の記事の References
ヘッ
ダーにあるこの Message-ID
を使ってスコアを付けるためのスコア規則
を追加します。これは事実上、現在のバッファーにある記事に返答したすべての
記事のスコアを増加させます。これは、あなたが言ったことに人々が答えたら、
それに容易に気付かせてもらいたいときに、とても便利です。
gnus-score-followup-article
これは、あなた自身の記事に直接フォローアップした記事にスコアを加えます。
gnus-score-followup-thread
これは、あなたの記事より「下」のスレッドに現れるすべての記事にスコアを加 えます。
これら二つの関数は、本来どちらも message-sent-hook
のようなフック
の中で、例えばこのように使うためのものです:
(add-hook 'message-sent-hook 'gnus-score-followup-thread) |
自分の Message-ID
をじっくりと眺めてみると、はじめの二〜三文字は
常に同じであることに気が付くでしょう。以下の二つは私のものです:
<x6u3u47icf.fsf@eyesore.no> <x6sp9o7ibw.fsf@eyesore.no> |
したがって、このマシンでは ‘x6’ で「私」かどうかを見分けることがで きます。これは使えます—以下の規則は、私自身へのすべてのフォローアップ のスコアを上げるでしょう:
("references" ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@.*eyesore\\.no>" 1000 nil r)) |
「あなたの」が最初の二文字になるか最初の三文字になるかは、システムに依存 します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Gnus が「伝統的」なヘッダー —‘From’, ‘Subject’ など—にスコ
アを付けるのはとても速いです。ですが、他のヘッダーにスコアを付けるに
は head
のスコアのための規則を書く必要があり、それは合致を探すた
めに Gnus が毎回バックエンドから単独の記事を取り寄せなければならないこと
を意味します。これは大きなグループでは長い時間がかかります。
ヘッダーまたは本文の遅いスコア付けは、変
数 gnus-inhibit-slow-scoring
を設定することによって禁止することが
できます。もし gnus-inhibit-slow-scoring
が正規表現だったら、グルー
プがその正規表現に合致する場合に遅いスコア付けが禁止されます。それ
が t
だったら、すべてのグループで遅いスコア付けが禁止されます。
さて、これに関してニュースグループでの遅さのためにできることは多くはあり
ませんが、メールグループのためにはより優れた手段があります。
To From Newsgroups の章でこの機構がどう働くかが詳しく説明されてい
ますが、ここではどうしたら nnml
で ‘To’ と ‘Cc’ ヘッダー
にスコアを付けることができるかの調理の例を挙げましょう。
以下を ‘~/.gnus.el’ ファイルに置いてください。
(setq gnus-extra-headers '(To Cc Newsgroups Keywords) nnmail-extra-headers gnus-extra-headers) |
Gnus を再起動して、M-x nnml-generate-nov-databases コマンド
で nnml
の overview ファイルを作り直してください。たくさんのメー
ルを持っていると、これには長い時間がかかるでしょう。
そして I e s p To RET <your name> RET のようにすると、 ‘To’ と ‘Cc’ ヘッダーに“extra headers”としてスコアを付けるこ とができます。
わかったかな? 簡単だよね。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
クロスポストのスコアを低くしたければ、合致させるべき行は Xref
ヘッ
ダーです。
("xref" (" talk.politics.misc:" -1000)) |
ある数、例えば三つ以上のグループにクロスポストされている記事のスコアを低 くしたければ、
("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r)) |
これは一般的にはあまり良い考えではありません—とても長い時間がかかるか
らです。実際 Gnus は、それぞれの記事を個別にサーバーから取得してこなけれ
ばならないのです。でも、とにかくあなたはやりたいのでしょうね。合致させる
キーは三つ (Head
, Body
, All
) あるのですが、それぞれ
のスコアファイルで一つを選んで、それに固執すべきです。もし二つを使うと、
それぞれの記事は 二回 取得されてしまいます。もし Head
で
ちょっとだけ、Body
でもちょっとだけ合致させたい、というのであれば、
素直に All
を使って全部合致させてください。
ある一定の値より低いスコアを持つ記事には、おそらく既読の印を付けてしまい たくなるでしょう。これは ‘all.SCORE’ ファイルに以下のものを入れてお くことによって、最も簡単に実現できます。
((mark -100)) |
同様のことを expunge
で行なうことを考えても良いでしょう。
もし [^abcd]*
みたいなものを指定すると、期待外れの結果で終わるか
もしれません。これは改行文字にも合致してしまうので、えーと、未知のものま
で引きずり出してしまうもしれません。代わりに [^abcd\n]*
を使いま
しょう。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
もし、表題ヘッダーに ‘Sex with Emacs’ という文字がある記事だけを残 して、その他の記事すべてを消去してしまいたければ、スコアファイルに以下の ようなものを入れることができます:
(("subject" ("Sex with Emacs" 2)) (mark 1) (expunge 1)) |
これで ‘Sex with Emacs’ に合致するすべての記事のスコアが上がって、 残りの記事には既読の印が付き、おまけにそれらは消去されるでしょう。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
間違いなく、他のニュースリーダーは「グローバル削除ファイル (global kill file)」を持っています。それらは普通、すべてのグループに適用される、利用 者のホームディレクトリーに格納されている一つの削除ファイル以上の何物でも ありません。ふふん! つまらない、低能なニュースリーダーだね。
私がここで話しているのはグローバルスコアファイルです。全世界の、あらゆる 地域の利用者のスコアファイル。それはすべての国家を巨大な一つの幸せなスコ アファイル同盟に団結させる! スコア天使! 新しい、でもテストされていない!
他人のスコアファイルを使うためにしなければならないのは、
gnus-global-score-files
変数を設定することがすべてです。それぞれ
のスコアファイルにつき一つ、またはそれぞれのスコアファイルディレクトリー
につき一つのエントリーになります。Gnus はどのスコアファイルをどのグルー
プに使うのが適切であるかを自分で決定します。
例えはスコアファイ ル ‘/ftp@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE’ およ び ‘/ftp@ftp.some-where:/pub/score’ ディレクトリーにあるすべてのス コアファイルを使いたければ、このように設定してください:
(setq gnus-global-score-files '("/ftp@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE" "/ftp@ftp.some-where:/pub/score/")) |
単純でしょう? ディレクトリー名は ‘/’ で終わらなくてはなりません。
これらのディレクトリーは、一般に Gnus を使う一回の期間中に一回だけしか読
み込まれません。もし遠隔ディレクトリーを手動で再読み込みすることが必要だ
と思ったら、gnus-score-search-global-directories
命令を使ってくだ
さい。
ただし、現時点ではこのオプションを使うと、グループに入るのがいくらか遅く なります。(つまり—かなり、ですけど。)
他の人たちに使ってもらうためにスコアファイルを維持管理したくなったら、単 にあなたのスコアファイルを匿名 ftp に置いて、世界に公表してください。逆 行司会者になりましょう! その後に続いて間違いなく起こる逆行司会者戦争、 すなわち人々の共感を勝ち取るための戦いに参加して、彼らのスコアファイルに 偽りの前提を使わせるように誘導するのです! やったね! これでネットは救わ れる!
‘retro-’ を「逆行」と訳しました。日本では「レトロ」を「古き善き時代 の」のような肯定的な意味で使うことが少なくないのですが、ここでは本来の 「時代に逆行した」「使えねー」のような意味で使っています。
以下に、逆行司会者なりたがりのための秘技をいくつか、即席で述べます:
Message-ID
で減点する。
mark
と expunge
アトムを設定し、汚らわしい記事を完全に葬り
去る。
… 果たして他のニュースリーダーは、将来グローバルスコアファイルをサ ポートするでしょうか? うふふ。そう、どう考えてみたって、Blue Wave や xrn や 1stReader とかいったニュースリーダーは、スコアをサポート するべきですね。今は固唾を飲んで見守ることにしましょうか?
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Gnus はまだ、あのうざったい古い消去ファイルをサポートしています。実際消 去ファイルの項目はもう消してもよいのですが、それは Daniel Quinlan がスコ アファイルを考え出す前に私が書いたものなので、そのコードはまだ残してある のです。
要するに、消去処理はスコア処理よりもかなり (私に言わせれ ば ものすごく) 遅いので、あなたの消去ファイルはスコアファイルに書 き換えた方が良いかもしれません。
いずれにせよ、消去ファイルは普通の emacs-lisp
ファイルです。この
ファイルの中にはどんな形式でも入れることができます。つまり消去ファイルを
グループに入ったときに実行する一種の原始的なフック関数のように使うことが
できます。まあそれがあまりいい方法ではないとしてもね。
通常の消去ファイルは以下のようになります:
(gnus-kill "From" "Lars Ingebrigtsen") (gnus-kill "Subject" "ding") (gnus-expunge "X") |
これは私が書いたすべての記事に既読の印を付け、概略バッファーから印の付い た記事を削除します。とっても便利です。あなたもそう思うでしょ。
他のプログラムではまったく違う消去ファイルの構文を使っています。
Gnus は rn
の消去ファイルらしきものに出会うと、何とかそれを解釈し
ようとします。
GNUS 消去ファイルを編集するための二つの概略バッファー関数があります:
このグループの消去ファイルを編集しま
す (gnus-summary-edit-local-kill
)。
一般消去ファイルを編集します (gnus-summary-edit-global-kill
)。
消去ファイルを編集する二つのグループモード関数があります:
このグループの消去ファイルを編集しま
す (gnus-group-edit-local-kill
)。
一般消去ファイルを編集します (gnus-group-edit-global-kill
)。
消去ファイル変数:
gnus-kill-file-name
‘soc.motss’ グループ用の消去ファイルは通
常 ‘soc.motss.KILL’ という名前です。このファイル名を得るためにグルー
プ名に付加される接尾語は、gnus-kill-file-name
変数で与えられます。
「グローバル」消去ファイルは (スコアファイルの意味での「グローバル」じゃ
ないよ、もちろん) 単に ‘KILL’ という名前です。
gnus-kill-save-kill-file
この変数が nil
以外であれば、Gnus は処理の後に消去ファイルを保存
します。これは期限切れ消去を行なう消去を使っているときに必要です。
gnus-apply-kill-hook
グループに消去ファイルを適用するために呼び出されるフック。これはディフォ
ルトでは (gnus-apply-kill-file)
です。同じグループのためのスコア
ファイルがある場合に消去ファイルを無視したければ、このフック
を (gnus-apply-kill-file-unless-scored)
に設定してください。消去
ファイルを処理させたくなければ、この変数を nil
に設定してください。
gnus-kill-file-mode-hook
消去ファイルモードのバッファー内で呼び出されるフック。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
あなたが古い消去ファイルをどっさり持っているのであれば、それらをスコアファ イルに変換したくなるでしょう。もしそれらが「普通の」ものであれば、 ‘gnus-kill-to-score.el’ パッケージを使うことができます。そうでなけ れば、手で変換しなければならないでしょう。
消去ファイルからスコアファイルへの変換パッケージは、標準では Emacs には 含まれていません。それは Gnus の配布の contrib ディレクトリー、また は http://heim.ifi.uio.no/~larsi/ding-various/gnus-kill-to-score.el か ら入手することができます。
あなたの消去ファイルが非常に複雑なのであれば—それ
に gnus-kill
形式以外のものがたくさん含まれているのなら、それらを
手で変換しなければならないでしょう。あるいは、単そのままにしておいてくだ
さい。Gnus は以前と同様にそれらを使ってくれるでしょう。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
表題や From ヘッダーにスコアを付けるのは十分素敵ですが、本当に興味がある のが、特定の表題に関してある人が言っていることだけだった場合はどうすれば 良いでしょう? もしくは、A さんが B さんにフォローアップしているときは彼 女が言っていることを読みたくないけれど、C さんにフォローアップしていると きは何を言っているかを知りたいという場合は?
上級スコア規則を使えば、どんな複雑なスコアのパターンでも作成することがで きます。
7.15.1 上級スコア付け構文 | ||
7.15.2 上級スコア付けの例 | ||
7.15.3 上級スコアのちょっとした秘訣 |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
普通のスコア規則では、規則の最初の要素が文字列です。上級スコア付け規則で
は、最初の要素はリストです。二番目の要素は、最初の要素が nil
でな
い値として評価されたときに適用されるスコアです。
これらのリストは三つの論理演算子、一つのリダイレクト演算子 (訳注: 本文で は間接演算子と表記されています)、および様々な合致演算子で構成することが できます。
論理演算子:
&
and
この論理演算子は、それぞれの引数を順に評価して、ある評価の結果
が false
になったら停止します。すべての引数が true
の値に
評価された場合、この演算子は true
を返します。
|
or
この論理演算子は、それぞれの引数を順に評価して、ある評価の結果
が true
になったら停止します。どの引数も true
でなかったら、
この演算子は false
を返します。
!
not
,A,
この論理演算子はたった一つの引数を取ります。その引数の値の論理否定を返し ます。
スコア付けされている現在の記事の先祖たちに対して、その引数群を適用する
「間接演算子」があります。例えば 1-
は、現在の記事の親にもスコア
規則を適用します。2-
は現在の記事の祖父母にスコア規則を適用します。
代わりに ^^
を書くこともでき、^
(caret==キャレット) の数で
どのくらい祖先の記事までさかのぼるかを示します。
最後に合致演算子があります。これらが本当の仕事をするものです。合致演算子 はヘッダー名の文字列で、その後に合致と合致の型が続きます。典型的な合致演 算子は ‘("form" "Lars Ingebrigtsen" s)’ のようなものです。ヘッダー 名は単純なスコア付けをするときのものと同じで、合致の型も同じです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下の例はスコアファイルの規則であることに注意してください。それらを使って 完璧なスコアファイルを作るには、別の括弧の組でそれらを囲んでください。
Lars が Gnus に関して話をしているときに、彼によって書かれた記事のスコア を増やしたいとしましょう:
((& ("from" "Lars Ingebrigtsen") ("subject" "Gnus")) 1000) |
ふん、簡単すぎるかな?
彼が長い記事を書くとき、時々何か素敵なことを言います:
((& ("from" "Lars Ingebrigtsen") (| ("subject" "Gnus") ("lines" 100 >))) 1000) |
しかし、彼が Reig Eigil Logge によって書かれたものに反応しているときは、 彼が書いたものを読みたくありません:
((& ("from" "Lars Ingebrigtsen") (1- ("from" "Reig Eigil Logge"))) -100000) |
Redmondo が消えた靴下について書いたときにフォローアップしたすべての人の スコアが上げられますが、それは彼らが白い靴下について語っているときのみで す。しかし Lars が靴下について話をしているときは、たいていあまりおもしろ くありません:
((& (1- (& ("from" "redmondo@.*no" r) ("body" "disappearing.*socks" t))) (! ("from" "Lars Ingebrigtsen")) ("body" "white.*socks")) 1000) |
大量の記事が流れているグループを読んでいて、返答にしか興味が無いとしましょ う。そういう場合にやることは、"Re:"、"Fw:" または "Fwd:" で始まる表題を 持っていないすべての記事のスコアを下げて、返答の印で始まる表題を持ってい る記事のすべての親のスコアを上げることです。
((! ("subject" "re:\\|fwd?:" r)) -200) ((1- ("subject" "re:\\|fwd?:" r)) 200) |
可能性は無限大です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
&
と |
論理演算子は、無意味な処理を迂回する論理 (原典:
short-circuit logic) に基づいて動作します。すなわち、その処理の結果が明
らかになった時点で、引数を処理することを止めます。例えば &
の引数
の一つが false
に評価されると、残りの引数を評価する意味がありませ
んから。これは遅い合致 (‘body’ や ‘header’) を最後に持ってきて、
速い合致 (‘from’ や ‘subject’) を最初に持ってくるべきであるこ
とを示唆します。
間接演算子 (1-
など) は、それらの引数をスレッドの一世代前に作用さ
せます。次のようなことをすると:
... (1- (1- ("from" "lars"))) ... |
これは「現在の記事の祖父母の from ヘッダーでスコアを付ける」ということを 意味します。間接演算子の処理はとても速いのですが、以下のやり方の方が:
(1- (& ("from" "Lars") ("subject" "Gnus"))) |
次のものより良いです:
(& (1- ("from" "Lars")) (1- ("subject" "Gnus"))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
スコアは (特に適応スコアを使っていると) 際限無く膨れ上がる傾向があること に気が付くでしょう。スコアが大きくなりすぎると、それらはすべての意味を失 います—それらは単に最大値に達してしまうので、意味のある方法で使うこと は難しくなります。
Gnus はこの問題の解決を助けるためにスコアを減衰させる機構を提供します。
スコアファイルが読み込まれて、gnus-decay-scores
が nil
で
はないと、Gnus はスコアファイルを減衰機構に通して、すべての永続でないス
コア規則のスコアを下げます。もし gnus-decay-scores
が正規表現だっ
たら、それに合致するスコアファイルだけが扱われます。例え
ば adaptive スコアファイルだけを減衰させるには、それ
を ‘\\.ADAPT\\'’ に設定すれば良いでしょう。減衰そのもの
は gnus-decay-score-function
関数によって実行され、ディフォルト
は gnus-decay-score
です。以下はその関数の定義です:
(defun gnus-decay-score (score) "Decay SCORE according to `gnus-score-decay-constant' and `gnus-score-decay-scale'." (let ((n (- score (* (if (< score 0) -1 1) (min (abs score) (max gnus-score-decay-constant (* (abs score) gnus-score-decay-scale))))))) (if (and (featurep 'xemacs) ;; XEmacs' floor can handle only the floating point ;; number below the half of the maximum integer. (> (abs n) (lsh -1 -2))) (string-to-number (car (split-string (number-to-string n) "\\."))) (floor n)))) |
gnus-score-decay-constant
はディフォルトで 3、
gnus-score-decay-scale
は 0.05 です。これは以下のようなことを引き
起こします:
もしこの減衰関数がお気に召さないなら、自分用の関数を書いてください。それ は減衰させるべきスコアを唯一の引数として呼ばれ、新しいスコアを整数で返さ なければなりません。
Gnus は一日に一回スコアを減衰させようとします。例えば Gnus を四日間走ら せていないと、Gnus はスコアを四回減衰させます。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Yasutaka SHINDOH on May 11, 2011 using texi2html 1.82.