- bullseye 20010119-7
- bullseye-backports 1:4.18.1-1~bpo11+1
- testing 1:4.18.1-1
- unstable 1:4.18.1-1
PROCMAILSC(5) | File Formats Manual | PROCMAILSC(5) |
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
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>
1994/10/07 | BuGless |