Provided by: manpages-hu_20010119-5_all bug

NÉV

       procmailsc - a procmail súlyozott pontozási módszere

ÁTTEKINTÉS

       [*] w^x feltétel

LEÍRÁS

       A  szűrési  feltételekben  megadott  hagyományos  igaz/hamis vizsgálat mellett a súlyozott
       pontozási módszert is  lehet  használni  a  feltételek  helyességének  megállapítására.  A
       szűrési  feltételben  használt pontozási módszereknél a pozitív értékek az igaz állításnak
       felelnek meg.

       A feltételek az alábbi módon kapnak pontokat, `fontosság' (w) és `kitevő' (x).  A feltétel
       előtt (ugyanabban a sorban) lehet megadni ezt a következőképen:
              w^x
       Ahol, mind w és x pozitív valós számok -2147483647.0 és 2147483647.0 között.

Súlyozás egyszerű feltételnél

       A  feltétlenek való első megfeleléskor w -vel nő a pontszám. A következő megfeleléskor már
       w*x -el. Harmadik találat esetén w*x*x -el. Negyedik megfeleléskor  w*x*x*x  -el.  És  így
       tovább.

       Ezt a következő képlettel lehet kifejezni:

                                   n
                   n   k-1        x - 1
              w * Sum x    = w * -------
                  k=1             x - 1

       A képlet megadja a feltétel n számú megfelelésekor az összpontszámot.

       A következő eseteket lehet x -től függően megkülönböztetni:

       x=0     Csak  az  első  találat  esetén  növekszik  a  pontszám  w-vel. Minden más találat
               figyelmen kívül lesz hagyva.

       x=1     Minden egyes találat w-vel  növeli  a  pontszámot.  Az  összpontszám  a  találatok
               számával egyenes arányban növekszik.

       0<x<1   Minden  újabb  találattal  kevesebb  pontot adunk az összpontszámhoz, mint előtte.
               Ekkor az összpontszám egyoldalról  (aszimptotikusan)  közelít  egy  határértékhez.
               (Lásd MEGJEGYZÉS részt később).

       1<x     Minden  újabb  találattal  egyre  több pontot adunk az összeghez, mint előtte.  Az
               összpontszám exponenciálisan növekszik.

       x<0     Segítségével megkülönböztethetjük az egész- vagy páratlan számú találatokat.

       Ha a feltételnek való megfelelést megfordítjuk [negáljuk] (pl. találat, ha nincs egyezés a
       feltétellel), akkor az n értéke természetesen nulla vagy egy lehet.

Súlyozott kilépésiértékek

       Ha  a  program  EXIT_SUCCESS  (=0) -vel fejezi be működését, akkor az összpontszám w lesz.
       Bármely más kilépési kód (hibás működés) esetén az összpontszám x lesz.

       A program kilépési kódjának megfordításakor (negálásakor) kapott pontszámot  a  lehetséges
       találatok  számával  ('virtual  number  of matches') azonosítja a program. Az összpontszám
       kiszámítása  ugyanúgy  történik,  mint  ahogy  hagyományos  kifejezéssel  való  egyezéskor
       történne, vagyis mintha n=`exitcode' számú találat lett volna.

Súlyozás levélméret alapján

       Ha a levél mérete M akkor:

              * w^x  > L

       esetén a megfelelő pontszám a következőképen számolható:

                         x
                  /  M  \
              w * | --- |
                  \  L  /

       És:

              * w^x  < L

       esetén a pontszám a következőként adódik:

                         x
                  /  L  \
              w * | --- |
                  \  M  /

       Mindkét  esetben, ha L=M, akkor az összpontszámhoz csupán w adódik. Az előző példa azonban
       hosszabb levelekre, míg az utóbbi a rövidebb levelekre használandó. Az x változtatásával a
       függvény pontosságát lehet 'finomhangolni', de az x=1 többnyire megfelelő.

EGYÉB

       A  szűrési  feltételben  (recipe)  szereplő  összes  pontszámot  a  $=  környezeti változó
       segítségével lehet kiolvasni.  Ezt a változó minden szűrés után ellenőrzésre kerül (még ha
       a szűrés nem is hajtódik végre).

PÉLDÁK

       A  következő  példával minden a olyan levelet töröltethetünk, amely a törzsében 150 sornál
       többet tartalmaz.  Az első sorban egy üres feltétel talalható, amely minden levélre  igaz,
       ezzel  a  pontszámnak  egy  kezdeti  (negatív)  értéket  adtunk meg.  A következő feltétel
       segítségével minden egyes új sor  esetén  növeltetjük  az  összpontszámot  (soronként  egy
       ponttal). A feltétel pozitív pontszámmal zárul, ha a levél 150 sornál többet tartalmazott.

              :0 Bh
              * -150^0
              *    1^1  ^.*$
              /dev/null

       Ha  van  egy  külön  levelesmappánk, amelyet mindig először olvasunk el, akkor a következő
       szűrési feltétellel a fontosabb leveleket átirányíthatjuk ebbe a mappába. Az első feltétel
       nem  használ  pontozást,  mindössze  figyeli, hogy a levelek nem tartalmazzák-e a megadott
       feltételeket. A következő  feltételek  pedig  a  következőt  fejezik  ki:  józsi  és  kati
       általában  hasznos dolgokról írnak; a megbeszélésekről szóló levelek fontosak a számunkra;
       válaszleveleket is szívesen olvasunk; Elvis-ről szóló leveleket  (hátha  megtudunk  valami
       újat) mindig elolvassuk (minél többször említik a levélben Elvist, annál több pontot kap a
       levél, de maximum 4000 pontot); túl sok idézett  sort  tartalmazó  levelet  el  szeretnénk
       kerülni;  ha  smiley-t  küldenek  nekünk,  akkor azt szívesen megnézzük (erre maximum 3500
       pontot adunk); három embertől (főnők, timi, péter) általában  unalmas  leveleket  szoktunk
       kapni;  és végül nem szeretjük a hosszú leveleket, jobb, ha a levél csak 2000 bájt hosszú,
       ha ennél hosszabb, akkor 100 pontot, ha 4000  bájtnál  hosszabb  akkor  pedig  800  pontot
       vonunk  le  az  összes pontszámából.  A pontozási módszer segítségével azonban, még ha egy
       unalmas levelet is kapunk három emberünk valamelyikétől a levél  még  bekerülhet  a  külön
       mappánkba, ha pl. megbeszélésről szól, vagy tartalmaz legalább 2 darab smileyt.

              :0 HB
              *         !^Precedence:.*(junk|bulk)
              * 2000^0   ^From:.*(jozsi@otthon|kati@munkahely)
              * 2000^0   ^Subject:.*megbeszeles
              *  300^0   ^Subject:.*Re:
              * 1000^.75 elvis|presley
              * -100^1   ^>
              *  350^.9  :-\)
              * -500^0   ^From:.*(fonok|timi|peter)@munkahely
              * -100^3   > 2000
              kulon_mappa

       Ha a levelezőlistákról érkező levelek közül csak a hasznos leveleket szeretnénk elolvasni,
       akkor a következő szűrési feltételt használhatjuk.  Az első  feltétel  ellenőrzi,  hogy  a
       levél  a  megadott  levelezőlistáról  jött-e.  Aztán  a leveleket ellenőrizzük, hogy olyan
       személytől jött-e akinek adunk a szavára, vagy olyan témáról  szól,  amelyről  mindent  El
       szeretnénk  olvasni.  Ha  ezeknek  megfelel,  akkor  marad  a  levél.   A  többi  levélnél
       megvizsgáljuk, hogy az idézett és az új sorok aránya eléri-e az 1:2-hözt. Ha  ennél  több,
       akkor  töröljük  a levelet. Minden olyan levél, amely átment az előző vizsgálaton mentésre
       kerül.

              :0
              ^From levelezőlista@vhol
              {
                :0:
                * ^(From:.*(piroska|bandi)|Subject:.*sieles)
                levlista

                :0 Bh
                *  20^1 ^>
                * -10^1 ^[^>]
                /dev/null

                :0:
                levlista
              }

       További mintapéldák a procmailex(5) súgóban lehet találni.

FIGYELMEZTETÉS

       A procmail a  gyors  keresés  érdekében  mindig  csak  a  balelső  (leftmost)  legrövidebb
       egyezésig  keres,  ha csak nem a MATCH -be értéket kell átadni, ebben az esetben a balelso
       leghosszabb találatig keres.  Pl. A balelső legrövidebb találat a következő kifejezésre:

       .*     mindig nullahosszúságú találatot eredményez.

       .+     pedig mindig csak egy karaktert (sortörést persze nem) eredményez.

LÁSD MÉG

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

HIBÁK

       Ha az x értéke túlcsorduláshoz vezet,  akkor  a  matematikai  függvénytárban  lévő  pow(3)
       függvénytől függ a végső eredmény.

       Lebegő pontos számok mérnöki formátumban (pl. 12e5) nem adhatók meg.

EGYÉB

       A `pozitív végtelen' (2147483647) elérésekor minden további súlyozás át lesz ugorva.

       A `negatív végtelen' (-2147483647) elérésekor a szűrés megfelelés hiányában befejeződik.

MEGJEGYZÉS

       0<x<1 esetén a hagyományos feltétel pontszáma a következő számhoz közelít egyoldalról:

                 w
              -------
               1 - x

       A maximális érték felének eléréséhez

                   - ln 2
              n = --------
                     ln x

       számú találatra van szükség.

SZERZŐ

       Stephen R. van den Berg
              <srb@cuci.nl>

MAGYAR

       Vizi Szilárd <vizisz@freemail.hu>