• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Böse Wörter filtern mit JavaScript

zmOe

New member
Hallo

Wäre es möglich mit JavaScript böse Wörter ( zb. Hur**sohn) und so weiter zu filter und dann sperren!?
Also im Kontaktformular : geben Sie Ihre Mitteilung ein... und wenn dort das Wort auftaucht was nicht auftauchen sollte. Möchte Ich gern das eine Fehlermeldung erscheint und darauf hinweist.

zb. User schreibt: Du **** bla bla also nur beleidigungen etc. und wen er auf abschicken klickt, sollte sich ein Modales Fenster öffnen (alert ausgabe).. Bitte keine Beleidigungen Danke :).

mfg zmOe
 
Wer unbedingt solchen Text veröffentlichen möchte kann das auch mit JS Prüfung.
Daher meine Empfehlung: mach das serverseitig und nicht mit JS.
 
Auf serverseitig lässt sich sowas nicht 100%ig umsetzen... außer du implementierst eine komplette Sprachsyntax- und Sprachinhaltserkennung.

Wenn du bei irgendwelchen Kommentaren/Mitteliungen sowas nicht haben willst, musst du das moderieren - d.h. jeden Beitrag erst selbst lesen und dann freischalten.
 
Hallo zmOe

gute Idee! Wie hier schon einige erwähnen, so einen Filter implementierst du sicherheitshalber immer erst auf der Serverseite (wie gesagt, das clientseitige Javascript kann man umgehen). Damit stellst du sicher, dass garantiert kein böses Wort in deine Datenbank wandert.

Eine clientseitige Implementation zusätzlich ist aber sehr sinnvoll aus Gründen der Usability! Mach deine User ruhig gleich vor dem Abschicken darauf aufmerksam, was passiert. Damit bietest du ihnen gleich die Gelegenheit ihre Fehler zu korrigieren anstatt dass sie voller Erwartung das Formular abschicken um dann erst darauf hingewiesen zu werden.

Eine einfache Implementation wäre server- wie clientseitig folgendermassen zu realisieren:
- Lade ein Liste mit "bösen Wörtern" (z.B. http://www.hyperhero.com/de/insults.htm)
- Trenne den Text des Users auf nach "Wörtern" (Leerzeichen sollten hinreichend sein als Trenner), mit text.split(" ")
- Entferne doppelte Wörter indem du das Array auf einzigartige Werte verringerst (z.B. mit http://iblog.ikarius.net/index.php/2010/10/31/javascript-unique-array/) - das spart Zeit im späteren Schritt
- Für jedes Wort überprüfe ob es in der Liste mit den bösen Worten vorkommt
- gibt es eine Übereinstimmung so enthält der Text mind. ein böses Wort.

Das ganze kann sehr rechenintensiv werden, abhängig von der Länge deiner Bad-Word-List und der Länge des Usertextes. Dauert das Vergleichen zu lange, kannst du hier noch optimieren indem du die Bad-Word-List kürzt (das Beispiel das ich gepostet habe enthält einiges was nicht wirklich "schlimm" ist IMHO) oder indem du am Usertext anfängst und gewisse Stoppwörter überspringst ("der", "die", "das", ...).

Viel Erfolg!

Gruss

Dominique
 
Die Liste ist ja lustig... "nicht wirklich schlimm" ist noch eine Untertreibung. Warum sollte z.B. "Geist" oder "Hai" ein Schimpfwort sein?
Ich bin aber der Meinung, dass sich die Mühe nicht lohnt, da solche Systeme viel zu leicht umgangen werden können (leicht veränderte/falsche Schreibweise, Zeichen ersetzen, zusammengesetze Wörter, Worttrennung durch Rechner verhindern, usw.).
Beispiel:
Wir wollen nicht, dass das Wort "Scheiß" geschrieben wird. Da wir klug sind, haben wir "Scheiss" und "Scheis" auch auf die "Böse Wörter"-Liste gesetzt.

Jetzt erkläre mir bitte einen Algorithmus, der
Wassollderscheisdenn
als "böse" erkennt, aber
Wascheisentrommel
(mir ist jetzt auf die Schnelle nichts besseres eingefallen, aber hoffentlich siehst du den sinn)
als harmlos durchgehen lässt.
 
Hallo kkapsner,

du hast recht, 100% Erfolgsquote in der Erkennung sind nicht zu erreichen. Zumal Sprache ja auch ohne Schimpfwörter beleidigen kann ("Deine Eltern waren wohl Geschwister", "Du machst es ja mit deiner Schwester/Mutter", etc.). Daher kann es bei solchen Filtern immer nur darum gehen, eine gewissen Zielquote zu erfüllen (60% oder so) - aber: Das Optimierungspotenzial ist nahezu grenzenlos, man kann auf relativ hohe Erkennungsraten kommen proportional zum Aufwand den man reinstecken möchte (Ich studier Computerlinguistik, wir arbeiten öfters an solchen Systemen...).

Wenn sich dieser Grenzen bewusst ist, kann man ohne weiteres einen mehr oder minder primitiven Filter einbauen - auch wenn er nicht alles "abhält", sind auch nur 50% Erfolg mehr als gar nichts. Und wer 100% will muss User-Input ganz streichen, da Beleidigen und Fluchen Teil jeder Sprache ist und in vielen Fällen sogar richtig gut für die Konversation/Interaktion sein kann.

Grüsse

Dominique
 
Ich weiß nicht, 50% Erkennung klingt zwar nicht schlecht, aber wenn ich unbedingt jemanden beleidigen will und der Filter bremst meinen ersten Versuch, versuche ich es noch ein paar mal mit verschiedenen Ansätzen. Mal angenommen, ich versuche es maximal fünf mal, dann ist die Wahrscheinlichkeit, dass mein Versuch gestoppt wird 0.5^5 = 0.03125 (wenn man annimmt, dass die Versuche unabhängig sind, was sie nicht sind - aber mal als grobe Schätzung). Das ist zwar mehr als gar nichts... aber nicht viel.

PS: Computerlinguistik find' ich spannend - auch wenn ich davon extrem wenig Ahnung hab.
 
Zurück
Oben