Provided by:
manpages-es-extra_0.8a-17_all 
NOMBRE
procmailsc - tecnica puntuacion de peso de procmail
SINOPSIS
[*] w^x condici'on
DESCRIPCI'ON
Ademas de las condiciones tradicionales verdadero o falso que puede
especificar en una receta, puede usar tecnicas de puntuacion de peso
para decidir si una cierta receta concuerda o no. Cuando se usa la
puntuacion de peso en una receta, la puntuacion final de esa receta
debe ser positiva para que concuerde.
Una cierta condicion puede contribuir a la puntuacion si le situa un
`peso' (w) y un `exponente' (x). Esto lo hace precediendo la condicion
(en la misma linea) con:
w^x
Considerando que w y x son numeros reales entre -2147483647.0 y
2147483647.0.
Condiciones de expresi'on regular sopesadas
La primera vez que se encuentra la expresion regular, se anadira w a la
puntuacion. La segunda vez que la encuentre anadira w*x La tercera vez
que la encuentre anadira w*x*x La cuarta vez anadira w*x*x*x y asi
sucesivamente.
Esto se puede describir con la siguiente formula concisa:
n
n k-1 x - 1
w * Sum x = w * -------
k=1 x - 1
Representa la puntuacion total anadida para esta condicion si se
encuentran n concordancias.
Observe que se pueden hacer las siguientes distinciones de casos:
x=0 Solo la primera concordancia contribuira w a la puntuacion. Se
ignoran cualquier concordancia posterior.
x=1 Cada concordancia contribuira el mismo w a la puntuacion. La
puntuacion crece linealmente con el numero de concordancias
encontradas.
0<x<1 Cada concordancia contribuye menos a la puntuacion que la
previa. La puntuacion se aproxima asintoticamente a cierto
valor (vease la seccion notas NOTAS abajo).
1<x Cada concordancia contribuira mas a la puntuacion que la
previa. La puntuacion crece exponencialmente.
x<0 Se puede utilizar para favorecer numeros pares o impares de
concordancias.
Si la expresion regular esta negada (i.e. concuerda si no se
encuentra), entonces n obviamente puede ser cero o uno.
Condiciones de programa sopesadas
Si el programa devuelve un codigo de salida EXIT_SUCCESS (=0), entonces
la puntuacion total anadida sera w. Si devuelve cualquier otro codigo
de salida (indicando fallo), la puntuacion total anadida sera x.
Si el codigo de salida del programa esta negado, el codigo de salida se
considerara como si fuera un numero virtual de concordancias. El
calculo de la puntuacion anadida prosigue como si tuviera una expresion
regular normal con n=`exitcode' concordancias.
Condiciones de longitud sopesadas
Si la longitud del correo actual es M entonces:
* w^x > L
generara una puntuacion adicional de:
x
/ M \
w * | --- |
\ L /
Y:
* w^x < L
generara una puntuacion adicional de:
x
/ L \
w * | --- |
\ M /
En ambos casos, si L=M, esto anadira w a la puntuacion. En el primer
caso, sin embargo, se favorecen los correos grandes, en el ultimo se
favorecen los pequenos. Aunque x se puede variar para un mejor ajuste
el decrecimiento de la funcion, el uso tipico fija x=1.
MISCEL'ANEA
Puede consultar la puntuacion total de todas las condiciones de una
receta de la variable de entorno $=. Esta variable se fija cada vez
cuando procmail ha analizado todas las condiciones de una receta
(incluso si la receta no esta siendo ejecutada).
EJEMPLOS
La siguiente receta separa tdos los correos que tienen mas de 150
lineas en el cuerpo. La primera condicion contiene una expresion
regular vacia que, debido a que siempre se verifica, se usa para dar a
nuestra puntuacion un desplazamiento negativo. La segunda condicion
concuerda con cada linea del correo y consume el desplazamiento
negativo previo que le dimos (un punto por linea). Al final, la
puntuacion sera solo positiva si el correo contiene mas de 150 lineas.
:0 Bh
* -150^0
* 1^1 ^.*$
/dev/null
Supongamos que tiene una carpeta prioritaria que siempre lee primero.
La siguiente receta toma la prioridad del correo y lo almacena en
carpetas especiales. La primera condicion es regular, i.e. no
contribuye a la puntuacion, simplemente tiene que satisfacerse. Las
otras condiciones describen cosas como: john and claire normalmente
tienen cosas importantes que decir, las reuniones son normalmente
importantes, las respuestas se favorecen un poco, los mail respecto a
Elvis (esto es solo un ejemplo :- se favorecen (cuando mas se mencione,
mas se favorece el correo , pero la maxima puntuacion extra debida a
Elvis sera 4000, no importa con que frecuencia sea mencionado), muchas
lineas marcadas como de respuesta no no gustan, los "smileys" son
apreciados (la puntuacion de ellos alcanza un maximo de 3500, esas tres
personas normalmente no envian correos interesantes, lo correos serian
preferentemente pequenos (v.g. mails con 2000 octetos de largos
puntuaran -100, 4000 bytes de largos -800). Como puede ver, si alguien
de esas personas poco interesantes envia correo, el coreo todavia tiene
una oportunidad de aterrizar en la carpeta prioritaria, v.g. si es
sobre una reunion (meeting), o si contiene al menos dos "smileys".
:0 HB
* !^Precedence:.*(junk|bulk)
* 2000^0 ^From:.*(john@home|claire@work)
* 2000^0 ^Subject:.*meeting
* 300^0 ^Subject:.*Re:
* 1000^.75 elvis|presley
* -100^1 ^>
* 350^.9 :-\)
* -500^0 ^From:.*(boss|jane|henry)@work
* -100^3 > 2000
carpeta_prioritaria
Si esta suscrito a una lista de correo y le gustaria leer los mensajes
de calidad, entonces las siguientes recetas podrian
realizar el truco. Primero estamos seguros que el correo proviene de
la lista de correo, Entonces comprobamos si es de ciertas personas de
las que valoramos su opinion, o sobre un motivo sobre el que queremos
saber absolutamente todo. Si es asi, lo guardamos. En otro caso
verificamos si la razon de lineas citadas del original es al menos 1:2.
Si lo excede separamos el correo. Todo lo que sobreviva a la
verificacion previa se almacena.
:0
^From mailinglist-request@some.where
{
:0:
* ^(From:.*(paula|bill)|Subject:.*skiing)
mailinglist
:0 Bh
* 20^1 ^>
* -10^1 ^[^>]
/dev/null
:0:
mailinglist
}
Para mas ejemplos deberia mirar en la pagina de manual procmailex(5).
ADVERTENCIAS
Debido a que esto incrementa la busqueda por un orden de magnitud, el
egrep interno de procmail siempre buscara la concordancia m'as corta por
la izquierda salvo que este determinado que asignar a MATCH, en cuyo
caso busca la concordancia m'as larga por la izquierda. V.g. la
concordancia m'as corta por la izquierda, por el mismo, la expresion
regular:
.* siempre concuerda con una cadena de longitud cero en el mismo
sitio.
.+ siempre concordara con un caracter (salvo nueva linea, por
supuesto).
V'EASE TAMBI'EN
procmail(1), procmailrc(5), procmailex(5), sh(1), csh(1), egrep(1),
grep(1),
FALLOS (BUGS)
Si, en una condicion de longitud especifica un x que causa un
desbordamiento, procmail esta a la meced de la funcion pow(3) de su
libreria matematica.
No se aceptan numero en coma flotante en formato exponencial (v.g.
12e5).
MISCEL'ANEA
Tan pronto como se alcanza `mas infinito' (2147483647), cualquier
condicion de peso simplemente se salta.
Tan pronto como se alcanza `menos infinito' (-2147483647), la condicion
se considerara como `sin concordancia' y la receta termina antes.
NOTAS
Si en una expresion regular formula sopesada 0<x<1, la puntuacion total
anadida para esta condicion se aproximara asintoticamente:
w
-------
1 - x
Para alcanzar la mitad del valor maximo necesita
- ln 2
n = --------
ln x
concordancias.
AUTOR
Stephen R. van den Berg
<srb@cuci.nl>