227 votes

Comment mettre en place un bon filtre de blasphèmes ?

Nombre d'entre nous doivent traiter les entrées des utilisateurs, les requêtes de recherche et les situations où le texte d'entrée peut potentiellement contenir des blasphèmes ou un langage indésirable. Il est souvent nécessaire de les filtrer.

Où peut-on trouver une bonne liste de gros mots dans différentes langues et dialectes ?

Existe-t-il des API disponibles pour les sources qui contiennent de bonnes listes ? Ou peut-être une API qui dit simplement "oui c'est propre" ou "non c'est sale" avec quelques paramètres ?

Quelles sont les bonnes méthodes pour attraper les personnes qui essaient de tromper le système, comme a$$, azz, ou a55 ?

Des points bonus si vous proposez des solutions pour PHP :)

Edit : Réponse aux réponses qui disent simplement d'éviter la question programmatique :

Je pense qu'il y a une place pour ce type de filtre lorsque, par exemple, un utilisateur peut utiliser la recherche d'images publiques pour trouver des photos qui sont ajoutées à une piscine communautaire sensible. S'il peut rechercher "pénis", il obtiendra probablement de nombreuses photos de, ouais. Si nous ne voulons pas de photos de ce genre, le fait d'empêcher l'utilisation de ce mot comme terme de recherche constitue un bon moyen de contrôle, même s'il ne s'agit pas d'une méthode infaillible. Obtenir la liste de mots en premier lieu est la vraie question.

Je parle donc d'un moyen de déterminer si un seul jeton est sale ou non et de l'interdire tout simplement. Je ne prendrais pas la peine d'empêcher un sentiment comme la référence totalement hilarante à la "girafe au long cou". Vous ne pouvez rien y faire :)

15 votes

C'est une honte que toutes les réponses les plus importantes soient des diversions existentielles et défaitistes du défi de la programmation. Avec l'essor des services de calcul "cyborg" comme Mechanical Turk et la socialisation de la quasi-totalité des logiciels, il est plus important que jamais de disposer d'une heuristique permettant de signaler le contenu et de le porter à l'attention d'un modérateur !

12 votes

Veuillez faire attention au contexte linguistique, surtout si vous faites de l'i18n. Une fois, j'ai essayé de créer un groupe Google pour le cours que je donnais intitulé "Sanal ortamda görsellestirme", ce qui signifie en turc "Visualisation dans les médias virtuels". Google a été assez stupide pour le rejeter parce que le titre contenait le mot "anal" . Sanal[tr]=Virtuel[en] et Google m'a accusé sans vergogne de blasphème ! :D S'il vous plaît, ne laissez pas des choses bizarres comme ça se produire.

0 votes

Et si vous cherchez le mot en Espagnol ? Vous pouvez en fait contourner le filtre Google Images de cette manière (si vous êtes localisé dans une autre langue).

186voto

HanClinto Points 5925

Filtres d'obscénité : Mauvaise idée, ou mauvaise idée incroyablement interconnectée ?

Aussi, on ne peut pas oublier L'histoire inédite du SpeedChat de Toontown où même l'utilisation d'une "liste blanche de mots sûrs" a permis à un jeune de 14 ans de la contourner rapidement : "Je veux mettre ma girafe au long cou dans ton lapin blanc et moelleux."

La ligne du bas : En fin de compte, quel que soit le système que vous mettez en place, il n'y a absolument aucun substitut à l'examen humain (par les pairs ou autre). N'hésitez pas à mettre en œuvre un outil rudimentaire pour vous débarrasser des "drive-by", mais pour le troll déterminé, vous devez absolument adopter une approche non algorithmique.

Un système qui supprime l'anonymat et introduit la responsabilité (ce que Stack Overflow fait bien) est également utile, notamment pour aider à combattre Le G.I.F.T. de John Gabriel.

Vous avez également demandé où vous pouviez obtenir des listes de jurons pour commencer. Un projet open-source à consulter est le suivant Dansguardian -Vérifiez le code source de leurs listes de blasphèmes par défaut. Il y a également une tierce partie supplémentaire Liste de phrases que vous pouvez télécharger pour le proxy et qui pourrait vous être utile pour glaner des informations.

Editer en réponse à la question éditer : Merci pour la clarification de ce que vous essayez de faire. Dans ce cas, si vous essayez juste de faire un simple filtre de mots, il y a deux façons de le faire. La première consiste à créer une seule longue regexp avec toutes les phrases interdites que vous souhaitez censurer, et à effectuer une recherche/remplacement de regex avec celle-ci. Une regex comme :

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

et l'exécuter sur votre chaîne d'entrée en utilisant preg_match() à un test en gros pour un hit,

ou preg_replace() pour les effacer.

Vous pouvez également charger ces fonctions avec des tableaux plutôt qu'avec une seule longue regex, et pour les longues listes de mots, cela peut être plus facile à gérer. Voir le preg_replace() pour obtenir de bons exemples de la manière dont les tableaux peuvent être utilisés de manière flexible.

Pour des exemples supplémentaires de programmation PHP, voir cette page pour un classe générique quelque peu avancée pour le filtrage des mots qui élimine les lettres centrales des mots censurés, et ceci Question précédente sur Stack Overflow qui contient également un exemple en PHP (la partie la plus intéressante est l'approche des mots filtrés basée sur SQL - le compensateur de leet-speak peut être supprimé si vous le jugez inutile).

Vous avez également ajouté : " Obtenir la liste de mots en premier lieu est la vraie question. "En plus de certains des liens précédents de Dansgaurdian, vous trouverez sans doute les éléments suivants ce pratique .zip de 458 mots pour être utile.

0 votes

@JPLemme : Oui, j'aurais dû ajouter [sic] après, puisque c'est comme ça qu'Atwood l'a écrit. :)

0 votes

"Club Penguin" ajoute des centaines d'entrées à son filtre de blasphèmes. tous les jours : raphkoster.com/2008/05/09/…

7 votes

Une enveloppe de limites de mots autour de vos options d'expressions rationnelles empêcherait l'utilisation de l'option clbuttique erreur

53voto

nickhar Points 5747

Je sais que cette question est assez ancienne, mais c'est une question qui revient souvent...

Il y a à la fois une raison et un besoin distinct de filtres de blasphème (cf. Entrée Wikipedia ici ), mais ils sont souvent loin d'être exacts à 100 % pour des raisons très distinctes ; Contexte y précision .

Cela dépend (entièrement) de ce que vous essayez d'obtenir - à la base, vous essayez probablement de couvrir le " sept gros mots "et encore plus... Certaines entreprises ont besoin de filtrer les jurons les plus élémentaires : les gros mots, les URL ou même les informations personnelles, etc., mais d'autres doivent empêcher la désignation illicite de comptes (Xbox live en est un exemple) ou bien plus encore...

Le contenu généré par les utilisateurs ne contient pas seulement des jurons potentiels, il peut aussi contenir des références offensantes à.. :

  • Les actes sexuels
  • Orientation sexuelle
  • Religion
  • Ethnicité
  • Etc...

Et potentiellement, en plusieurs langues. Shutterstock a développé listes de gros mots de base dans 10 langues à ce jour, mais il reste basique et très orienté vers leurs besoins de "balisage". Il existe un certain nombre d'autres listes disponibles sur le web.

Je suis d'accord avec la réponse acceptée que ce n'est pas une science définie et comme la langue est un outil en constante évolution défi mais où un taux de capture de 90% est mieux que 0%. Cela dépend purement de vos objectifs - ce que vous essayez d'atteindre, le niveau de soutien dont vous disposez et l'importance de supprimer les différents types de blasphèmes.

Pour construire un filtre, vous devez tenir compte des éléments suivants et de la manière dont ils se rapportent à votre projet :

  • Mots/phrases
  • Acronymes (FOAD/LMFAO etc.)
  • Faux positifs (mots, lieux et noms comme "mishit", "scunthorpe" et "titsworth")
  • URLs (les sites pornographiques sont une cible évidente)
  • Informations personnelles (courriel, adresse, téléphone, etc.), le cas échéant.
  • Choix de la langue (généralement l'anglais par défaut)
  • Modération (comment, le cas échéant, vous pouvez interagir avec le contenu généré par les utilisateurs et ce que vous pouvez en faire)

Vous pouvez facilement construire un filtre de blasphèmes qui capture plus de 90 % des blasphèmes, mais vous n'atteindrez jamais 100 %. C'est tout simplement impossible. Plus vous voulez vous rapprocher de 100 %, plus cela devient difficile... Ayant construit dans le passé un moteur de blasphèmes complexe qui traitait plus de 500 000 messages par jour en temps réel, je vous donne le conseil suivant :

Un filtre de base impliquerait :

  • Établir une liste de blasphèmes applicables
  • Élaboration d'une méthode de traitement des dérivations de blasphèmes

Un filtre modérément complexe impliquerait, (en plus d'un filtre de base) :

  • Utilisation d'une correspondance de motifs complexe pour traiter les dérivations étendues (utilisation de regex avancées)
  • Traiter avec Leetspeak (l33t)
  • Traiter avec faux positifs

Un filtre complexe impliquerait un certain nombre des éléments suivants (en plus d'un filtre modéré) :

  • Listes blanches et les listes noires
  • Inférence bayésienne naïve filtrage des phrases/termes
  • Soundex les fonctions (où un mot ressemble à un autre)
  • distance de Levenshtein
  • Endiguer
  • Des modérateurs humains pour aider le moteur de filtrage à apprendre par l'exemple ou lorsque les correspondances ne sont pas assez précises sans aide (un système qui s'améliore en permanence).
  • Peut-être une forme de moteur d'IA

29voto

Matt Passell Points 1247

Je ne connais pas de bonnes bibliothèques pour cela, mais quoi que vous fassiez, assurez-vous de laisser passer les choses. J'ai eu affaire à des systèmes qui ne me permettaient pas d'utiliser "mpassell" comme nom d'utilisateur, parce qu'il contenait "ass" comme sous-chaîne. C'est un excellent moyen d'aliéner les utilisateurs !

23 votes

Ou interdire le terme "cockpit" dans un jeu de vaisseaux spatiaux volants

27voto

Steven A. Lowe Points 40596

Un système de filtrage des jurons ne sera jamais parfait, même si le programmeur est sûr de lui et se tient au courant de tous les développements nus

Cela dit, toute liste de "vilains mots" est susceptible de fonctionner aussi bien que n'importe quelle autre liste, puisque le problème sous-jacent est le suivant compréhension de la langue qui est pratiquement insoluble avec la technologie actuelle.

La seule solution pratique est donc double :

  1. être prêt à mettre fréquemment à jour votre dictionnaire
  2. engager un rédacteur humain pour corriger les faux positifs (par exemple, "clbuttic" au lieu de "classic") et les faux négatifs (oops ! en avoir manqué un !)

1 votes

Détectez juste le mot avec des espaces de chaque côté, un point après, Non ?

2 votes

H3ll no man, cela ne fonctionne que pour les cas les plus triviaux ; nous avons affaire à des humains, et ils sont assez intelligents :)

26voto

Matthew Points 605

Lors d'un de mes entretiens d'embauche, le directeur technique de la société qui m'interrogeait a essayé un jeu de mots/web que j'avais écrit en Java. Parmi une liste de mots du dictionnaire anglais Oxford, quel était le premier mot à être deviné ?

Bien sûr, le mot le plus grossier de la langue anglaise.

D'une manière ou d'une autre, j'ai quand même eu l'offre d'emploi, mais j'ai ensuite trouvé une liste de mots blasphématoires (non contrairement à celui-ci ) et a écrit un script rapide pour générer un nouveau dictionnaire sans tous les mauvais mots (sans même avoir à regarder la liste).

Dans votre cas particulier, je pense que la comparaison de la recherche avec des mots réels est la meilleure solution pour une liste de mots comme celle-ci. Les styles alternatifs/la ponctuation nécessitent un peu plus de travail, mais je doute que les utilisateurs les utilisent assez souvent pour que cela pose problème.

8 votes

Hors sujet, mais quel est le mot le plus vulgaire ? J'ai toujours considéré que c'était le mot C ou le mot N, mais je suppose que les gens pensent que le mot F est

2 votes

"Je doute que les utilisateurs l'utilisent assez souvent pour que ce soit un problème". Gardez l'espoir. Une fois que les utilisateurs auront découvert le filtre, ils s'efforceront de trouver des moyens de le contourner. Cela peut être aussi simple que de remplacer des lettres par des chiffres, de placer des espaces de façon étrange, etc.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X