Möchte (habe zum Teil) einen SPAM Filter für mein PRogramm gebaut, aber leider komme ich bei der Umsetztung des bayesian (
Meflin wußte es) Filter nicht wirklich auf einen grünen Zweig.
*) Habe eine Liste der Wörter mit einer Bewertung (0 kein SPAM bis 10000 voller SPAM, 4000 ist neutral)
*) nun gehe ich das Mail Wort für Wort durch
Delphi-Quellcode:
p1 := 1.0;
p2 := 1.0;
p1 := p1*(word^.FWertigkeit / 10000.0);
p2 := p2*(1.0 - word^.FWertigkeit / 10000.0);
und am Ende dann (wobei spamcount die Anzahl der gefunden Wörter ist, für die es eine Wertigkeit oben gab)
Delphi-Quellcode:
if spamCount > 0 then begin
p1 := Power(p1, 1.0 / spamCount);
p2 := Power(p2, 1.0 / spamCount);
Result := 5000 + round(5000.0 * ( (p2 - p1) / (p2 + p1) ));
end;
Aber irgendwo passt das ganze nicht.
Wenn ich mir ein SPAM Mail durchlaufen lasse :
p2 geht sehr schnell gegen 0
p1 geht etwas langsamer aber trotzdem noch schnell gegen 0 (der größte wert in der Wertigkeitsliste ist 9900)
daher p1 = 0,99*0,99*0,99*0,99*0,99*0,99*0,99*0,99*0,99*0,99* 0,01
wenn ich das nicht hinbekomme, dann verwende ich einfach
Result := Summe(Werigkeit) / spamCount;
Hoffe jemand kann mich auf die richtige Spur bringen.