phpbar.de logo

Mailinglisten-Archive

[php] Doppelte ähnliche Texte abfangen?

[php] Doppelte ähnliche Texte abfangen?

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mit Nov 29 16:30:07 CET 2006


Hi Yannik,

Am Mittwoch, 29. November 2006 15:35 schrieb Yannik Hampe:
> 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.

wenn er mit dem kompletten Text der neuen PM sucht und dieser nicht 
exakt so irgendwo existiert, wird er auch keine Treffer bekommen, d.h. 
Du wirst gar nicht erst dahin kommen, die Relevanz auslesen zu 
können. ;-) Also entweder habe ich Deinen Ansatz nicht verstanden, oder 
er ist logisch falsch. :-)

> 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.

Die generelle Gefahr, auch bei der Benutzereinschränkung ist, daß 
eigentlich unterschiedliche PMs wegen nur marginaler Unterschiede 
plötzlich als zu ähnlich erkannt und abgelehnt werden. Konkret: Ein 
Nutzer schreibt einem anderen eine lange PM. Der Nutzer antwortet mit 
Vollzitat nur ein Wort: "OK.". Und darauf antwortet dann wieder der 
andere mit "Gut.". In diesem Fall wir die errechnete 
Ähnlichkeitsprozentzahl sehr hoch sein und auch noch denselben Benutzer 
treffen. Trotzdem sind die PMs inhaltlich keine Variation ein und 
derselben PM.

> 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...

Die vorgeschlagenen PHP-Lösungen sind vermutlich erstens langsam und 
zweitens schwerlich praktikabel, weil erst einmal stapelweise - 
teilweise sicherlich etwas längere - PMs aus der Datenbank gezogen und 
dann mit den Funktionen analysiert werden müssen. Sind gerade viele 
Benutzer gleichzeitig online, kann man damit sicherlich eine hübsche 
Last auf dem System erzeugen.

Bei der Datenmenge, die man bei 35.000 Nutzern in der Datenbank vermuten 
kann, wird MATCH ... AGAINST ... allerdings mit Sicherheit auch sehr 
langsam sein.


Viele Grüße
Lutz

php::bar PHP Wiki   -   Listenarchive