Exemplo n.º 1
0
void insert(struct ss **r, int v)
{
    if (!(*r))
    {
        *r = &t[v];
        t[v].hams = !isspam(v);
        t[v].spams = isspam(v);
        return;
    }
    if (t[v].score < (*r)->score)
        insert(&(*r)->left, v);
    else
        insert(&(*r)->right, v);
    (*r)->hams += (!isspam(v));
    (*r)->spams += isspam(v);
}
Exemplo n.º 2
0
int main()
{
    scanf("%*[^\n]");
    thams = tspams = 0;
    for (n = 0; 2 == scanf("%*d%*f%*d%d%*d%*d%*d%*d%*d%*f%lf",
                           &t[n].qrel, &t[n].score); n++)
    {
        t[n].score += random() * 1e-20;
        if (t[n].qrel == 1)
            thams++;
        else
            tspams++;
    }
    head = NULL;
    hams = spams = 0;
    for (i = 0; i < n; i++)
    {
        double hamabove = hamgt(head, t[i].score);
        double spambelow = spamlt(head, t[i].score);
        double eps = .3;
        /*
         * double oddsratio = (hams-hamabove+eps)/(hamabove+eps) * (spambelow+eps)/(spams-spambelow+eps);
         * double oddsratio = 1/(hamabove+eps) * (spambelow+eps);
         * double logoddsratio = log(oddsratio);
         */
        double hamNtail = (hamabove + eps) / (hams + eps);
        double spamNtail = (spambelow + eps) / (spams + eps);
        double tail = (hamabove + spambelow + eps + eps) / (hams + spams + eps + eps);
        double spamCtail = spamNtail / tail;
        double hamCtail = hamNtail / tail;
        /* double logoddsratio = log(spamNtail/hamNtail); */
        double logoddsratio = log((spambelow * hams + eps) / (hamabove * spams + eps));
        printf("%d judge=%s class=%s score=%f hamprob=%f spamprob=%f sum %f hamNtail %f spamNtail %f tail %f\n", i + 1, isspam(i) ? "spam" : "ham", logoddsratio <= 0 ? "ham" : "spam",
               logoddsratio, hamCtail, spamCtail, hamCtail + spamCtail, hamNtail, spamNtail, tail);
        if (isspam(i))
        {
            spams++;
        }
        else
        {
            hams++;
        }
        insert(&head, i);
    }
    return 0;
}
Exemplo n.º 3
0
int main(void)
{
	char *mesg;

	setprogname("spam-2");

	spaminit();
	mesg = read_mesg(stdin);
	if (mesg == NULL)
		eprintf("Could not read message.");
	if (isspam(mesg))
		printf("spam\n");
	else
		printf("not spam\n");
	free(mesg);

	return 0;
}