'computes the probability of a message being spam (Robinson-Fisher method)
H = C-1( -2.ln(prod(p)), 2*n )
S = C-1( -2.ln(prod(1-p)), 2*n )
I = (1 + H - S) / 2
Courtesy of http://christophe.delord.free.fr/en/index.html'

def robinsonFisher(self, probs, ignore):

    n = len(probs)
    try:
        H = chi2P(((-2.0) * math.log(reduce(operator.mul, map((lambda p: p[1]), probs), 1.0))), (2 * n))
    except OverflowError:
        H = 0.0
    try:
        S = chi2P(((-2.0) * math.log(reduce(operator.mul, map((lambda p: (1.0 - p[1])), probs), 1.0))), (2 * n))
    except OverflowError:
        S = 0.0
    return (((1 + H) - S) / 2)
