Provided by:
manpages-es-extra_0.8a-16_all 
NOMBRE
procmailsc - técnica puntuación de peso de procmail
SINOPSIS
[*] w^x condición
DESCRIPCIÓN
Además de las condiciones tradicionales verdadero o falso que puede
especificar en una receta, puede usar técnicas de puntuación de peso
para decidir si una cierta receta concuerda o no. Cuando se usa la
puntuación de peso en una receta, la puntuación final de esa receta
debe ser positiva para que concuerde.
Una cierta condición puede contribuir a la puntuación si le sitúa un
‘peso’ (w) y un ‘exponente’ (x). Esto lo hace precediendo la condición
(en la misma línea) con:
w^x
Considerando que w y x son números reales entre -2147483647.0 y
2147483647.0.
Condiciones de expresión regular sopesadas
La primera vez que se encuentra la expresión regular, se añadirá w a la
puntuación. La segunda vez que la encuentre añadirá w*x La tercera vez
que la encuentre añadirá w*x*x La cuarta vez añadirá w*x*x*x y así
sucesivamente.
Esto se puede describir con la siguiente fórmula concisa:
n
n k-1 x - 1
w * Sum x = w * -------
k=1 x - 1
Representa la puntuación total añadida para esta condición si se
encuentran n concordancias.
Observe que se pueden hacer las siguientes distinciones de casos:
x=0 Sólo la primera concordancia contribuirá w a la puntuación. Se
ignoran cualquier concordancia posterior.
x=1 Cada concordancia contribuirá el mismo w a la puntuación. La
puntuación crece linealmente con el número de concordancias
encontradas.
0<x<1 Cada concordancia contribuye menos a la puntuación que la
previa. La puntuación se aproxima asintóticamente a cierto
valor (véase la sección notas NOTAS abajo).
1<x Cada concordancia contribuirá más a la puntuación que la
previa. La puntuación crece exponencialmente.
x<0 Se puede utilizar para favorecer números pares o impares de
concordancias.
Si la expresión regular está 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 código de salida EXIT_SUCCESS (=0), entonces
la puntuación total añadida será w. Si devuelve cualquier otro código
de salida (indicando fallo), la puntuación total añadida será x.
Si el código de salida del programa está negado, el código de salida se
considerará como si fuera un número virtual de concordancias. El
cálculo de la puntuación añadida prosigue como si tuviera una expresión
regular normal con n=‘exitcode’ concordancias.
Condiciones de longitud sopesadas
Si la longitud del correo actual es M entonces:
* w^x > L
generará una puntuación adicional de:
x
/ M \
w * | --- |
\ L /
Y:
* w^x < L
generará una puntuación adicional de:
x
/ L \
w * | --- |
\ M /
En ambos casos, si L=M, esto añadirá w a la puntuación. En el primer
caso, sin embargo, se favorecen los correos grandes, en el último se
favorecen los pequeños. Aunque x se puede variar para un mejor ajuste
el decrecimiento de la función, el uso típico fija x=1.
MISCELÁNEA
Puede consultar la puntuación 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 está siendo ejecutada).
EJEMPLOS
La siguiente receta separa tdos los correos que tienen más de 150
líneas en el cuerpo. La primera condición contiene una expresión
regular vacía que, debido a que siempre se verifica, se usa para dar a
nuestra puntuación un desplazamiento negativo. La segunda condición
concuerda con cada línea del correo y consume el desplazamiento
negativo previo que le dimos (un punto por línea). Al final, la
puntuación será sólo positiva si el correo contiene más de 150 líneas.
: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 condición es regular, i.e. no
contribuye a la puntuación, 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 sólo un ejemplo :- se favorecen (cuando más se mencione,
más se favorece el correo , pero la máxima puntuación extra debida a
Elvis será 4000, no importa con qué frecuencia sea mencionado), muchas
líneas marcadas como de respuesta no no gustan, los "smileys" son
apreciados (la puntuación de ellos alcanza un máximo de 3500, esas tres
personas normalmente no envían correos interesantes, lo correos serían
preferentemente pequeños (v.g. mails con 2000 octetos de largos
puntuarán -100, 4000 bytes de largos -800). Como puede ver, si alguien
de esas personas poco interesantes envía correo, el coreo todavía tiene
una oportunidad de aterrizar en la carpeta prioritaria, v.g. si es
sobre una reunión (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 está suscrito a una lista de correo y le gustaría leer los mensajes
de calidad, entonces las siguientes recetas podrían
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 opinión, o sobre un motivo sobre el que queremos
saber absolutamente todo. Si es así, lo guardamos. En otro caso
verificamos si la razón de líneas citadas del original es al menos 1:2.
Si lo excede separamos el correo. Todo lo que sobreviva a la
verificación 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 más ejemplos debería mirar en la página de manual procmailex(5).
ADVERTENCIAS
Debido a que esto incrementa la búsqueda por un orden de magnitud, el
egrep interno de procmail siempre buscará la concordancia ms corta por
la izquierda salvo que esté determinado qué asignar a MATCH, en cuyo
caso busca la concordancia ms larga por la izquierda. V.g. la
concordancia ms corta por la izquierda, por él mismo, la expresión
regular:
.* siempre concuerda con una cadena de longitud cero en el mismo
sitio.
.+ siempre concordará con un carácter (salvo nueva línea, por
supuesto).
VÉASE TAMBIÉN
procmail(1), procmailrc(5), procmailex(5), sh(1), csh(1), egrep(1),
grep(1),
FALLOS (BUGS)
Si, en una condición de longitud especifica un x que causa un
desbordamiento, procmail está a la meced de la función pow(3) de su
librería matemática.
No se aceptan número en coma flotante en formato exponencial (v.g.
12e5).
MISCELÁNEA
Tan pronto como se alcanza ‘mas infinito’ (2147483647), cualquier
condición de peso simplemente se salta.
Tan pronto como se alcanza ‘menos infinito’ (-2147483647), la condición
se considerará como ‘sin concordancia’ y la receta termina antes.
NOTAS
Si en una expresión regular fórmula sopesada 0<x<1, la puntuación total
añadida para esta condición se aproximará asintóticamente:
w
-------
1 - x
Para alcanzar la mitad del valor máximo necesita
- ln 2
n = --------
ln x
concordancias.
AUTOR
Stephen R. van den Berg
<srb@cuci.nl>