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)
       legrvidebb  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ő legrvidebb 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 tovbbi 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>