Ich habe einige meiner Programme mit einer Feedback-Funktion versehen. Leider habe ich vergessen, eine Art von Spam-Schutz einzubauen - so konnten Benutzer alles, was sie wollten, an meinen Server senden - wo jedes Feedback in einer riesigen Datenbank gespeichert wird.
Am Anfang habe ich regelmäßig diese Rückmeldungen überprüft - ich habe herausgefiltert, was nutzbarer und gelöschter Müll war. Das Problem ist: Ich bekomme 900 Rückmeldungen pro Tag. Nur 4-5 sind wirklich nützlich, die anderen Nachrichten sind meistens 2 Arten von Kauderwelsch:
Was ich bis jetzt gemacht habe:
Ich habe einen Filter installiert, um jedes Feedback zu löschen, das "asdf", "qwer" usw. enthält ... - & gt; nur 700 pro Tag
Ich habe einen Wortfilter installiert, um alles, was eine schlechte Sprache enthält, zu löschen - & gt; 600 pro Tag (frag nicht - aber da sind viele seltsame Leute da draußen)
Aber 400 pro Tag ist immer noch viel zu viel. Ich frage mich, ob jemand schon einmal mit einem solchen Problem umgegangen ist und einen Algorithmus kennt, um sinnlose Nachrichten herauszufiltern.
Jede Hilfe würde wirklich geschätzt werden!
Wie wäre es, wenn Sie nur eine vorhandene Implementierung eines Bayes-Spam-Filters verwenden, statt Ihre eigene zu implementieren? Ich hatte gute Ergebnisse mit DSpam
Ein etwas anderer Ansatz wäre, ein System einzurichten, um die Feedback-Nachrichten an ein Konto zu senden und die Standard-Spam-Filterung zu verwenden. Sie könnten sie über Google Mail senden und ihre Filterung ausprobieren lassen. Nicht perfekt, aber nicht zu viel Aufwand, um beides zu implementieren.
Wenn Sie nur englische Kommentare erwarten (oder sich darum kümmern), dann zählen Sie einfach die Anzahl der gültigen Wörter (in Bezug auf ein Wörterbuch) in das hochgeladene Feedback. Überschreitet die Anzahl einen Schwellenwert, akzeptieren Sie die Rückmeldung. Wenn nicht, Müll es. Diese einfache Heuristik könnte durch Hinzufügen ihrer Wörterbücher auf andere Sprachen erweitert werden.
Ich hatte ein Spam-Problem in einer Gästebuch-Funktion auf einer meiner Seiten (vor ziemlich langer Zeit). Meine Lösung bestand einfach darin, ein kleines Captcha-ähnliches Q & A-Feld hinzuzufügen, in dem der Benutzer gefragt wird: "Bist du ein Spamming-Roboter?" Jede Antwort, die das Wort "nein" enthält (das Durchlassen von "nein, ich bin nicht", "nein" und "überhaupt nicht", nur zum Spaß ...) erlaubte dem Benutzer zu posten ...
Der Grund, warum ich mich entschieden habe, Captcha nicht zu verwenden, war einfach, dass meine Benutzer ein "gemütlicheres" Gefühl für die Seite wollten und ein Captcha zu formell war. Das war persönlicher =)
Die einfachste Methode wäre, das Vorkommen jedes Buchstabens zu zählen. E ist der gebräuchlichste Buchstabe in Englisch, also sollte er am häufigsten verwendet werden. Sie können auch nach Wort- und Digraph-Häufigkeit suchen. Schauen Sie hier nach, um die Liste der am häufigsten verwendeten Begriffe auf Englisch zu erhalten.
Schauen Sie sich Claude Shannon und Markov Modelle an. Diese führen zu einer statistischen Technik zur Bewertung von Wahrscheinlichkeiten, dass Buchstabenkombinationen aus einer bestimmten Sprachquelle stammen.
Hier finden Sie einige relevante Kursnotizen von der Princeton University.
Fidelis Assis und ich haben den Spamfilter OSBF-Lua so angepasst, dass er leicht an andere Anwendungen angepasst werden kann Web Applikationen. Dieser Spam-Filter hat den TREC-Spam-Wettbewerb drei Jahre in Folge gewonnen. (Es macht mir nichts aus, zu prahlen, weil der Algorithmus von Fidelis ist, nicht von mir.)
Wenn Sie etwas ausprobieren möchten, haben wir den Code "fast beta" unter
%Vor%Wir sind noch weit davon entfernt, eine saubere Version zu veröffentlichen, aber der Code sollte erstellt werden, vorausgesetzt, Sie installieren automake 1.9. Wir beraten Sie gerne, wie Sie Ihre Datenbank säubern und in Ihre Anwendung integrieren können.
Die vorhergehenden Antworten über die Aufmachung einiger Spam-Filter Bayesian-inspirierter Classfier sind eine gute Idee. Für Ihre Anwendung, da Sie eine Menge langer Nonsense-Wörter zu bekommen scheinen, ist es am besten, eine Option in Ihrem Parser einzuschalten, um auf Bigrammen und Trigrammen zu trainieren; Andernfalls werden viele der Nonsense-Wörter nur als "nie zuvor gesehen" behandelt, was in Ihrem Fall nicht die nützlichste Analyse ist.
Ja, wie die Leute gesagt haben, könnten Sie sich Spamfilter oder Markov-Modelle ansehen.
Etwas einfacher wäre es, einfach die verschiedenen Wörter in jeder Antwort zu zählen und nach Häufigkeit zu sortieren. Wenn Wörter wie das Folgende nicht ganz oben stehen, ist es wahrscheinlich kein gültiger Text:
das , ein , in , von , und , oder , ...
Sie sind das am häufigsten verwendete Wort in jedem üblichen englischen Text.
Speichern Sie Kommentare einfach in einem ausstehenden Status, übergeben Sie sie über Akismet oder Defensio und verwenden Sie die Antwort, um sie als potenziellen Spam zu markieren oder sie als aktiv zu markieren.
Ich persönlich bevorzuge die API von Defensio, aber beide funktionieren fantastisch gut.