Wenn Sie versuchen, Spam-Wörter, Sätze wie "faddhusdhfi" und nichts anderes zu verhindern, könnten Sie immer eine Datenbank mit Wörtern und deren Synonymen haben. Sie könnten dann überprüfen, ob die Eingabe weniger als 50% bekannte Wörter in der Datenbank hat, Sie könnten eine Markierung setzen. Sie können eine Offline-Datenbank erstellen, die ich nicht empfehlen würde, oder Sie könnten einige Online-Datenbanken verwenden. Eine Liste von Wörtern, würde ich
http://thesaurus.com/
Eine Liste von Synonymen dieser Wörter vorschlagen, würde ich
http://www.synonyms.net/
Ich denke, deuten darauf hin, diese beiden wahrscheinlich das beste für das wäre Zweck, wie sie beide eine API haben (für synonyms.net ist es auf this Seite), die Sie verwenden können, so erfordert es nicht, die zurückgegebenen Seiten nach Wörtern zu analysieren.
Sie könnten dann wiederum kombinieren Sie dies mit anderen Methoden, wie zuvor erwähnt, wie Bayesian Filterung.
Dies passt zwar nicht wirklich zu Ihren AI-Anforderungen, verhindert jedoch eine Reihe von Meldungen.
Um Ihre 'AI' Anfrage zu erfüllen, könnten Sie wahrscheinlich in der Lage sein, ALICE's Spam.aiml anzupassen. Es ist in AIML Format, enthält aber eine Menge von Permutationen von 4-Symbol-Spam. Das Problem dabei ist, dass es langsam ist.
Eine mögliche Alternative zu Spam.aiml wäre, die Regeln der englischen Sprache zu verwenden, um Spam zu erkennen und zu filtern. Die folgenden Regeln könnten verwendet werden:
Jedes Wort muss mindestens einen Vokal haben. Der Buchstabe "Y" wird dafür als Vokal betrachtet.
Kein Wort hat mehr als 3 Konsonanten hintereinander. Zu diesem Zweck wird "TH" als ein Buchstabe betrachtet (um Wörter wie "strENGTH" nicht zu stören).
Kein Wort ist länger ist länger als 34 Buchstaben. Die Ausnahmen davon wären die Wörter here.
Einige Buchstabenkombinationen können nicht vorkommen. Ein Beispiel dafür wäre, dass die Buchstaben "R" und "C" niemals direkt nebeneinander in einer normalen Unterhaltung ohne Slang erscheinen.
Sie könnten eine Datenbank mit unmöglichen Kombinationen haben. Ich habe einen kleinen durch jede Permutation von 2-Buchstaben gegen eine Datenbank mit 6578 Worten ausgeführt wird, und kam mit diesen Ergebnissen auf:
df bf kf gf jk kj sj fj gj hj lj sl
Das ist alles unmöglich Kombinationen. Natürlich werden Kombinationen wie 'zz' weggelassen. Diese sind:
'oo' ist weggelassen, wie es in vielen Wörtern, wie 'Aussehen' erscheint.
Segmente der Zeichenfolge, die länger als 2 Zeichen sind und nacheinander wiederholt werden, werden als Spam gekennzeichnet. In der Zeichenfolge "lololololol" ist das wiederholte Segment "lo" und wird als Spam gekennzeichnet.
Mehr als 3 gleiche Vokale im selben Wort würden als Spam markiert werden. Zum Beispiel: 'oooouuuu' würde als Spam markiert werden, da 'o' und 'u' Vokale sind, die länger als 3 mal wiederholt wurden.
Kein Wort, das größer als 1 Zeichen ist, kann nur aus Vokalen bestehen. In diesem Fall würde "Y" nicht als Vokal betrachtet, um ein falsches Positiv auf "Sie" zu vermeiden.
Alle Eingaben, die diesen Vorschriften nicht um 15% oder mehr entsprechen (Marge für Rechtschreibfehler), werden zu Spam umgeleitet.
Wenn Sie sich entscheiden, ALICE-Dateien zu ändern, können Sie eine Menge von ihnen erhalten here. Neuere Version kann bei ALICE's Google Code page gefunden werden.
Sie könnten auch eine Rechtschreibprüfung verwenden, um bei der Spam-Erkennung zu helfen. Sie könnten die Eingabe für eine Rechtschreibprüfung wie PyEnchant (für Python) ausführen und die Vorschläge lesen. Wenn die Eingabe keine Vorschläge enthält, kann in den meisten Fällen davon ausgegangen werden, dass sie Spam ist.
Es ist nicht perfekt, aber es sollte in einem begrenzten Umfang. . Ich habe ein kleines Programm zu zeigen, was Spam wie diese Filterung in Folge würde dies die Ausgabe lautet:
>>> fdsahjfsd
'fdsahjfsd' is spam since more than 3 consonants appear in a row
>>> fhsdjhfksd
'fhsdjhfksd' is spam since it has no vowel
>>> jfsdkjl
'jfsdkjl' is spam since it has no vowel
>>> dk
'dk' is spam since it has no vowel
>>> ddds
'ddds' is spam since it has no vowel
>>> uxxs
'uxxs' is not spam
>>> kd
'kd' is spam since it has no vowel
>>> ukd
'ukd' is not spam
>>> asdjaskljlaskjldkasjkljdklas
'asdjaskljlaskjldkasjkljdklas' is spam since it is too long
>>> hdjaskj
'hdjaskj' is spam since invalid sequences detected
Wie ich schon sagte, es ist nicht perfekt, da es falsch positive Ergebnisse (wie ‚uxxs‘) liefert, aber das könnte mit einer Implementierung der Rechtschreibprüfung behoben werden.
Die Backdraw mit einer Implementierung der Rechtschreibprüfung würde bedeuten, dass Ihre Spam-Erkennung auf der Anzahl der Wörter basiert, die das Wörterbuch hat. Die meisten Rechtschreibprüfungen haben nur die ersten 10.000 Wörter, daher können einige ungewöhnliche Wörter als Spam geblockt werden. Wenn jedoch überprüft wird, ob mehr als 15% der Eingabe ungültig sind, könnte dies behoben werden.
Wenn Sie denken, dass es Ihnen helfen kann, können Sie das kleine Programm, das ich von here gemacht habe. Es ist in Python geschrieben.
Wie andere Antworten hier bereits gesagt haben, würde ein "State-of-the-Art" -Spam-Filter eine Mischung von Methoden erfordern.
können Sie verwenden SpamAssasin, PyZor, Reverend und Orange, aber wahrscheinlich das Beste, was alle diejenigen versuchen zu tun wäre, zusammen zu kombinieren.
Wenn Sie Lisp für dieses verwenden möchten, ist ein schöner Artikel über Bayesian Filterung in Lisp here.
Wenn Sie dies über ein neuronales Netzwerk tun möchten, dann this Codeproject Artikel kann nützlich sein. Es verwendet eine einfache und einfach zu bedienende DLL, und der Beispielcode kann fast direkt für die Aufgabe der Spam-Filterung verwendet werden.
Hoffe, dass geholfen hat!
Spamschutz *? Das erfordert eine bessere Kindererziehung. – Kaz
Filtern jeglicher Art ist ärgerlich, da Ihr SMTP-Server den Spam akzeptieren (d. H. Übermitteln) muss. Das Problem beim Akzeptieren von Spam besteht darin, dass sich falsche Spam-Mails in Ihrem Spam-Ordner befinden, ohne dass weitere Maßnahmen ergriffen werden müssen. Jemand wartet darauf, dass Sie auf etwas antworten, das Sie noch nicht gesehen haben, und es wird keine Benachrichtigung über die Nichtlieferung generiert, um sie darauf hinzuweisen. Wenn Sie in Ihrem Spam-Ordner nachsehen, haben die Spammer gewonnen. Du hast nichts erreicht; Sie scannen immer noch Ihre E-Mails, indem Sie Spam von Nicht-Spam trennen, nur in einem anderen Ordner. – Kaz
Auf der Suche nach theoretischen Lösungen wäre es wahrscheinlich besser, wenn Sie [stackexchange] (http://cs.stackexchange.com/) fragen. –