223 Stimmen

Wie implementiert man einen guten Schimpfwortfilter?

Viele von uns müssen mit Benutzereingaben, Suchanfragen und Situationen umgehen, in denen der Eingabetext möglicherweise Schimpfwörter oder unerwünschte Sprache enthält. Oftmals muss dies herausgefiltert werden.

Wo kann man eine gute Liste von Schimpfwörtern in verschiedenen Sprachen und Dialekten finden?

Gibt es APIs für Quellen, die gute Listen enthalten? Oder vielleicht eine API, die einfach sagt "ja, das ist sauber" oder "nein, das ist schmutzig" mit einigen Parametern?

Welche guten Methoden gibt es, um Leute zu erwischen, die versuchen, das System auszutricksen, wie z. B. a$$, azz oder a55?

Bonuspunkte, wenn Sie Lösungen für PHP anbieten :)

Edit: Antwort auf die Antworten, die besagen, dass man das programmatische Problem einfach vermeiden sollte:

Ich denke, dass diese Art von Filter sinnvoll ist, wenn beispielsweise ein Nutzer die öffentliche Bildersuche nutzen kann, um Bilder zu finden, die in einen sensiblen Gemeinschaftspool aufgenommen werden. Wenn sie nach "Penis" suchen können, dann werden sie wahrscheinlich viele Bilder von "ja" erhalten. Wenn wir solche Bilder nicht wollen, dann ist das Verbot des Wortes als Suchbegriff eine gute, wenn auch zugegebenermaßen nicht narrensichere Methode. Die eigentliche Frage ist, wie man die Liste der Wörter überhaupt erhält.

Ich suche also nach einer Möglichkeit, herauszufinden, ob ein einzelnes Token schmutzig ist oder nicht, und es dann einfach zu verbieten. Ich würde mir nicht die Mühe machen, eine Bemerkung wie die total witzige "Langhalsgiraffe" zu verhindern. Da kann man nichts machen :)

15 Stimmen

Es ist eine Schande, dass alle Top-Antworten existenzielle und defätistische Ablenkungen von der Programmierherausforderung sind. Angesichts der zunehmenden Bedeutung von "Cyborg"-Computerdiensten wie Mechanical Turk und der Tatsache, dass fast jede Software zu einer sozialen Plattform wird, ist es wichtiger denn je, eine Heuristik zu haben, um Inhalte mit einer roten Markierung zu versehen und sie einem Moderator zur Kenntnis zu bringen!

12 Stimmen

Bitte achten Sie auf den Sprachkontext, besonders wenn Sie i18n machen. Ich habe einmal versucht, eine Google-Gruppe für einen Kurs namens "Sanal ortamda görsellestirme" einzurichten, was auf Türkisch "Visualisierung in virtuellen Medien" heißt. Google war dumm genug, es abzulehnen. weil der Titel das Wort "anal" enthielt . Sanal[tr]=Virtual[en] und Google beschuldigte mich schamlos der Gotteslästerung! :D Bitte lassen Sie nicht zu, dass solche seltsamen Dinge passieren.

0 Stimmen

Wie wäre es, wenn Sie nach dem Wort suchen in Spanisch ? Sie können den Google-Bilder-Filter auf diese Weise umgehen (wenn Sie in einer anderen Sprache lokalisiert sind).

186voto

HanClinto Punkte 9253

Filter für Obszönitäten: Schlechte Idee oder unglaublich interkulturelle schlechte Idee?

Außerdem darf man nicht vergessen Die unerzählte Geschichte von Toontowns SpeedChat wo selbst die Verwendung einer "Safe-Word-Whitelist" dazu führte, dass ein 14-Jähriger diese schnell umging: "Ich möchte meine langhalsige Giraffe in deinen flauschigen weißen Hasen stecken."

Unterm Strich: Letztendlich gibt es für jedes System, das Sie einführen, keinen Ersatz für eine menschliche Überprüfung (sei es durch Gleichrangige oder auf andere Weise). Es steht Ihnen frei, ein rudimentäres Tool zu implementieren, um die Drive-by's loszuwerden, aber für den entschlossenen Troll brauchen Sie unbedingt einen nicht-algorithmusbasierten Ansatz.

Ein System, das die Anonymität aufhebt und Verantwortlichkeit einführt (etwas, das Stack Overflow gut macht), ist ebenfalls hilfreich, vor allem, um die John Gabriels G.I.F.T.

Sie haben auch gefragt, wo Sie Schimpfwörterlisten für den Anfang bekommen können - ein Open-Source-Projekt, das Sie sich ansehen sollten, ist Dansguardian -- sehen Sie sich den Quellcode für die Standard-Schimpfwortlisten an. Es gibt auch eine zusätzliche dritte Partei Liste der Phrasen die Sie für den Proxy herunterladen können und die Ihnen vielleicht als Nachschlagewerk dienen kann.

Bearbeiten als Antwort auf die Frage bearbeiten: Danke für die Klarstellung, was Sie zu tun versuchen. Wenn Sie in diesem Fall nur einen einfachen Wortfilter verwenden möchten, gibt es zwei Möglichkeiten. Zum einen können Sie eine einzelne lange Regexp mit allen verbotenen Ausdrücken erstellen, die Sie zensieren möchten, und dann einfach eine Regex-Suche/Ersetzung damit durchführen. Eine Regex wie:

$filterRegex = "(boogers|snot|poop|shucks|argh)"

und führen Sie es auf Ihrer Eingabezeichenkette mit preg_match() zum Großhandelstest für einen Treffer,

o preg_replace() um sie auszublenden.

Sie können diese Funktionen auch mit Arrays statt mit einer einzelnen langen Regex laden, und bei langen Wortlisten ist das möglicherweise handlicher. Siehe die preg_replace() für einige gute Beispiele dafür, wie Arrays flexibel eingesetzt werden können.

Weitere Beispiele für die PHP-Programmierung finden Sie auf dieser Seite für eine etwas fortgeschrittene generische Klasse für die Wortfilterung, bei der die mittleren Buchstaben aus zensierten Wörtern herausgefiltert werden, und diese vorherige Stack Overflow-Frage die auch ein PHP-Beispiel enthält (der wertvollste Teil darin ist der SQL-basierte Ansatz für gefilterte Wörter - der Leet-Speak-Kompensator kann weggelassen werden, wenn Sie ihn für unnötig halten).

Sie haben außerdem hinzugefügt: " Die eigentliche Frage ist, wie man die Liste der Wörter überhaupt bekommt. " -- zusätzlich zu einigen der vorherigen Dansgaurdian-Links finden Sie dieses praktische .zip von 458 Wörtern als hilfreich erweisen.

0 Stimmen

@JPLemme: Ja, das sollte es - ich hätte [sic] hinzufügen sollen, da Atwood es so geschrieben hat :)

0 Stimmen

"Club Penguin" fügt Hunderte von Einträgen zu seinem Schimpfwortfilter hinzu jeden Tag : raphkoster.com/2008/05/09/…

7 Stimmen

Ein Wortgrenzen-Wrapper um Ihre Regex-Optionen würde verhindern, dass die clbuttic Fehler

52voto

nickhar Punkte 19360

Ich weiß, dass diese Frage schon ziemlich alt ist, aber es ist eine häufig auftretende Frage...

Es gibt sowohl einen Grund als auch einen eindeutigen Bedarf für Schimpfwortfilter (siehe Wikipedia-Eintrag hier ), aber sie sind aus ganz bestimmten Gründen oft nicht 100%ig genau; Kontext y Genauigkeit .

Das hängt (ganz) davon ab, was Sie erreichen wollen - im Grunde genommen wollen Sie wahrscheinlich die " sieben schmutzige Wörter "und dann noch einige mehr... Einige Unternehmen müssen die grundlegendsten Obszönitäten filtern: einfache Schimpfwörter, URLs oder sogar persönliche Informationen usw., aber andere müssen die unerlaubte Benennung von Konten verhindern (Xbox Live ist ein Beispiel) oder weit mehr...

Von Nutzern erstellte Inhalte enthalten nicht nur potenzielle Schimpfwörter, sondern können auch anstößige Verweise auf andere Themen enthalten:

  • Sexuelle Handlungen
  • Sexuelle Orientierung
  • Religion
  • Ethnizität
  • Etc...

Und zwar möglicherweise in mehreren Sprachen. Shutterstock hat entwickelt Listen mit grundlegenden Schimpfwörtern bis heute in 10 Sprachen, aber es ist immer noch einfach und sehr auf die Bedürfnisse des "Tagging" ausgerichtet. Es gibt eine Reihe anderer Listen im Internet.

Ich stimme mit der akzeptierten Antwort überein, dass es sich nicht um eine definierte Wissenschaft handelt und als Sprache ist eine sich ständig weiterentwickelnde Herausforderung aber einer, bei dem eine Fangquote von 90 % besser ist als 0 %. Es hängt ganz von Ihren Zielen ab - was Sie erreichen wollen, wie viel Unterstützung Sie haben und wie wichtig es ist, Profanitäten verschiedener Art zu entfernen.

Bei der Erstellung eines Filters müssen Sie die folgenden Elemente berücksichtigen und wissen, wie sie sich auf Ihr Projekt beziehen:

  • Wörter/Phrasen
  • Akronyme (FOAD/LMFAO usw.)
  • Falsch-positive Meldungen (Wörter, Orte und Namen wie "Mishit", "Scunthorpe" und "Titsworth")
  • URLs (Pornoseiten sind ein offensichtliches Ziel)
  • Persönliche Informationen (E-Mail, Adresse, Telefon usw. - falls zutreffend)
  • Sprachauswahl (in der Regel Englisch als Standard)
  • Moderation (wie, wenn überhaupt, können Sie mit nutzergenerierten Inhalten interagieren und was Sie mit ihnen tun können)

Sie können leicht einen Schimpfwortfilter erstellen, der mehr als 90 % der Schimpfwörter erfasst, aber Sie werden nie 100 % erreichen. Das ist einfach nicht möglich. Je näher man an 100% herankommen will, desto schwieriger wird es... Nachdem ich in der Vergangenheit eine komplexe Profanity-Engine entwickelt habe, die mehr als 500.000 Echtzeit-Nachrichten pro Tag verarbeitet, möchte ich Ihnen folgenden Rat geben:

Ein grundlegender Filter würde Folgendes beinhalten:

  • Erstellung einer Liste mit geeigneten Schimpfwörtern
  • Entwicklung einer Methode zum Umgang mit Ableitungen von Schimpfwörtern

Ein mäßig komplexes Filtersystem würde (zusätzlich zu einem einfachen Filter) Folgendes umfassen:

  • Verwendung komplexer Musterabgleiche zur Behandlung erweiterter Ableitungen (unter Verwendung erweiterter Regex)
  • Der Umgang mit Leetspeak (l33t)
  • Der Umgang mit Falschmeldungen

Ein komplexer Filter würde eine Reihe der folgenden Elemente umfassen (zusätzlich zu einem moderaten Filter):

  • Whitelists und schwarze Listen
  • Naive bayesianische Inferenz Filterung von Phrasen/Begriffen
  • Soundex Funktionen (wo ein Wort wie ein anderes klingt)
  • Levenshtein-Abstand
  • Stemming
  • Menschliche Moderatoren, die eine Filtermaschine anleiten, damit sie durch Beispiele lernt oder wenn Übereinstimmungen ohne Anleitung nicht genau genug sind (ein sich selbst/kontinuierlich verbesserndes System)
  • Vielleicht eine Form von KI-Engine

29voto

Matt Passell Punkte 4187

Ich kenne keine guten Bibliotheken dafür, aber was auch immer Sie tun, stellen Sie sicher, dass Sie sich in die Richtung bewegen, die Dinge durchzulassen. Ich hatte schon mit Systemen zu tun, die mir nicht erlaubten, "mpassell" als Benutzernamen zu verwenden, weil er "ass" als Teilstring enthält. Das ist ein guter Weg, um Benutzer zu verprellen!

23 Stimmen

Oder das Verbot von "Cockpit" in einem Spiel mit fliegenden Raumschiffen

27voto

Steven A. Lowe Punkte 59247

Ein System zur Filterung von Schimpfwörtern wird nie perfekt sein, selbst wenn der Programmierer sich sicher ist und mit allen Entwicklungen im Bereich der Nacktheit auf dem Laufenden bleibt

jede Liste mit "unanständigen Wörtern" wird wahrscheinlich genauso gut funktionieren wie jede andere Liste, da das zugrunde liegende Problem darin besteht Sprachverständnis was mit der derzeitigen Technologie kaum zu bewältigen ist

Die einzige praktische Lösung ist also eine doppelte:

  1. Seien Sie bereit, Ihr Wörterbuch häufig zu aktualisieren.
  2. einen menschlichen Redakteur einstellen, der falsch-positive (z. B. "clbuttic" statt "classic") und falsch-negative (ups, einen übersehen!) Angaben korrigiert

1 Stimmen

Erkennen Sie einfach das Wort mit Leerzeichen auf beiden Seiten und einem Punkt danach, Nein?

2 Stimmen

H3ll nein Mann, das funktioniert nur in den trivialsten Fällen; wir haben es hier mit Menschen zu tun, und die sind ziemlich clever :)

26voto

Matthew Punkte 1115

Bei einem meiner Vorstellungsgespräche probierte der CTO des Unternehmens, der mich interviewte, ein Wort-/Webspiel aus, das ich in Java geschrieben hatte. Welches war das erste Wort, das aus einer Wortliste des gesamten Oxford English Dictionary erraten werden musste?

Natürlich, das unflätigste Wort der englischen Sprache.

Irgendwie habe ich das Jobangebot trotzdem bekommen, aber dann habe ich eine Liste mit Schimpfwörtern aufgetrieben (nicht im Gegensatz zu diesem ) und schrieb ein schnelles Skript, um ein neues Wörterbuch ohne alle schlechten Wörter zu erstellen (ohne die Liste überhaupt ansehen zu müssen).

In Ihrem speziellen Fall halte ich den Vergleich der Suche mit echten Wörtern für den richtigen Weg, um eine solche Wortliste zu verwenden. Die alternativen Stile/Zeichensetzung erfordern ein wenig mehr Arbeit, aber ich bezweifle, dass die Benutzer dies oft genug verwenden werden, um ein Problem zu sein.

8 Stimmen

Off topic, aber was ist das schlimmste Wort? Ich habe es immer für das C-Wort oder das N-Wort gehalten, aber ich nehme an, dass die Leute denken, das F-Wort sei

2 Stimmen

"Ich bezweifle, dass die Nutzer das oft genug nutzen werden, um ein Problem zu sein. Halten Sie die Hoffnung am Leben. Sobald die Nutzer über den Filter stolpern, werden sie nach Möglichkeiten suchen, ihn zu umgehen. Das kann so einfach sein wie das Ersetzen von Buchstaben durch Zahlen oder die ungerade Platzierung von Leerzeichen usw.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X