phpbar.de logo

Mailinglisten-Archive

[php] Doppelte ähnliche Texte abfangen?

[php] Doppelte ähnliche Texte abfangen?

Yannik Hampe yannik at cipher-code.de
Mit Nov 29 15:35:22 CET 2006


Ich gehe mal davon aus, du benutzt MySQL...

Du könntest auf die Textspalte erstmal einen Fulltext legen.
Dann kannst du mit
SELECT MATCH(spalte) AGAINST (text) AS relevanz FROM ...
Von MySQL einen Wert errechnen lassen, anhand dessen du einschätzen
kannst, ob es diese Nachricht schonmal gab.
Je höher der Wert in relevanz, je wahrscheinlicher ist es eine von
deinen Spams.

Zusätzlich solltest du wahrscheinlich noch im Where anführen, ob die
Nachricht auch vom gleichen Benutzer kam. Denn es gibt bestimmt auch
ähnliche PNs, die immer wieder zwischen irgendwelchen Benutzern
versendet werden.
Ausserdem ist eine zeitliche Einschränkung sicher sinnvoll. Wenn jemand
innerhalb der letzten Stunde bereits 20 PN versendet hat, dann solltest
du dessen PNs vielleicht genauer unter die Lupe nehmen und mehr als 60
PNs pro Stunde komplett verbieten.

Performancemässig würde ich sagen, dass dies eine wesentlich schneller
Lösung ist, als die vorgeschlagenen php-Lösungen.
Aber wirklich schnell ist MATCH dann trotzdem noch nicht. Du solltest
diese Prüfungen am besten nur dann machen, wenn das schon die 3. PN des
Benutzers in der Stunde ist oder irgend sowas...

Yannik

Andreas Kempf wrote:
> Hallo allerseits!
> 
> www.goatrance.de/goabase/ ist eine Community mit etwa 35.000 Usern. Es
> gibt dort ein Nachrichten-System, mit dem sich User untereinander
> schreiben können. Dabei kommt es ab & zu immer wieder vor, dass ein User
> hunderten von anderen Usern die gleiche Message schickt (obwohl die
> Nutzer-Regeln das verbieten - aber Troll ist halt Troll). U.a. wird das
> jedoch auch von Membern aus Nigeria genutzt, die einen Vorschussbetrug
> starten wollen (Nigeria-Connection/419). Und die sollen nun wirklich
> nicht dort nerven.
> 
> Daher möchte ich es solchen Leuten gern so schwer wie möglich machen,
> die gleiche Message mehrfach zu versenden. Ein einfacher Vergleich, ob
> der Text bereits in der DB steckt, ist easy - aber durch den User auch
> mit einer simplen Zeichenänderung zu umgehen. Daher vermute ich, dass
> dieses Verfahren nicht wirklich hilft.
> 
> Hatte hier schon mal jemand ein ähnliches Problem und wenn ja, wie habt
> ihr das gelöst?
> 
> Mein Ansatz dazu: Alle bisherigen Messages des Users holen, Wörter mit
> weniger als 4 Buchstaben ignorieren, alle Zeichen ausser Buchstaben
> eliminieren und den Rest durch count_chars schicken. Kommen die Top-10
> mit gleicher Anzahl wieder vor, ist es wohl die gleiche Message... (?) 
> 
> TIA, Andreas

php::bar PHP Wiki   -   Listenarchive