Contact
Impressum
Why this name?
FC5 · FC6 · MDV20070 · MDV20071 · MDV20080 · MDV20081 · MDV20090 · RH9 · RHEL4 · RHEL5 · SLES9 · SLES10 · SUSE101 · SUSE102 · SUSE103 · SUSE110 · centos4 · centos5 · debian-etch · debian-sarge · debian-unstable · f7 · f8 · f9 · ubuntu606 · ubuntu610 · ubuntu704 · ubuntu710 · ubuntu804 · ubuntu810

PROCMAILSC

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 AT cuci DOT nl>

MAGYAR

Vizi Szilárd <vizisz AT freemail DOT hu>


FC5 · FC6 · MDV20070 · MDV20071 · MDV20080 · MDV20081 · MDV20090 · RH9 · RHEL4 · RHEL5 · SLES9 · SLES10 · SUSE101 · SUSE102 · SUSE103 · SUSE110 · centos4 · centos5 · debian-etch · debian-sarge · debian-unstable · f7 · f8 · f9 · ubuntu606 · ubuntu610 · ubuntu704 · ubuntu710 · ubuntu804 · ubuntu810                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
No Banana Union - No Software Patents