Hallo Freunde des gehobenen Forumsgenusses,
Moin!
Ich habe zwei Tabellen in einer Datenbank:
Eine, in der steht wie viele Wörter alle Spam-Mails zusammen haben und wie viele alle erwünschten Mails.
Die Anzahl der Wörter in Spammails halte ich zwar nicht unbedingt für ein Kriterium, aber man weiß ja nie. Wenn Spammer sich üblicherweise sehr kurz fassen, und deine regulären Mailsender immer Romane schreiben, wäre das allein ja eventuell schon ein Kriterium.
Ich wusste, dass man mich missverstehen würde ;-)
Ich ziehe diese Zahlen nicht zur Bewertung heran, sondern verhindere mit ihnen,
dass 1Mio Spam-Mails die wenigen hundert erwünschten Mails erdrücken.
Alle in der Mail gefundenen Worte werden in der Datenbank gesucht. Die dort am häufigsten in den Kategorien HAM oder SPAM eingetragenen 10 Worte werden zur Bewertung herangezogen - wenn die Mehrzahl der Worte "SPAM" sagt, scheint die Mail wohl SPAM zu sein, und umgekehrt.
Also so etwa?
select ham, spam from spamfilter order by ((ham+1)/(spam+1)) limit 10;
An diesem Vorgehen stört mich, dass es im Vergleich zu folgender Abfrage ewig dauert:
select ham, spam from spamfilter where word='wort1' or word='wort2' etc.;
Wobei jedes Wort natürlich sowohl einen HAM als auch einen SPAM-Wert besitzt, also selten wirklich eindeutig böse ist. Aber nur die eindeutigsten Worte heranzuziehen bedeutet unter Umständen einen Vorteil, weil man damit gegen die Verwässerungstaktiken in Spammails wirkt.
Ich weiß nicht, ob das gut ist. Mein Spamfilter hat gerade einer Mail,
die Thunderbird nicht aussortiert hat eine Spam-Wahrscheinlichkeit von 0.6322 gegeben.
Es ist natürlich immer das Problem, wo man die Grenze setzt.
Als Trenner für Wörter habe ich übrigens folgenden regulären Ausdruck: #[\s.:,;(){}\[\]!?´`']+# hat da jemand einen besseren?
Wo du deine Worte trennst, ist ebenfalls komplett dir überlassen.
Ja, es hätte ja sein können, dass jemand meint, ein anderer Trenner wäre besser geeignet,
und zwar aus dem und dem Grund.
Gruß
Alexander Brock
[latex]\lim_{3 \to 4}{\sqrt{3}} = 2[/latex]