Beaucoup d'entre nous doivent faire face à la saisie de l'utilisateur, aux requêtes de recherche et aux situations dans lesquelles le texte saisi peut potentiellement contenir des propos grossiers ou une langue indésirable. Souvent, cela doit être filtré.
Où peut-on trouver une bonne liste de jurons dans différentes langues et dialectes?
Existe-t-il des API pour les sources contenant de bonnes listes? Ou peut-être une API qui dit simplement "oui, c'est propre" ou "non, c'est sale" avec certains paramètres?
Quelles sont les bonnes méthodes pour attraper les gens qui essaient de tromper le système, comme un $$, un azz ou un a55?
Points bonus si vous proposez des solutions pour PHP. :)
Edit: réponse aux réponses qui disent simplement éviter le problème 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 publique pour trouver des images qui sont ajoutées à un pool communautaire sensible. S'ils peuvent rechercher «pénis», ils obtiendront probablement de nombreuses photos de, oui. Si nous ne voulons pas d'images de cela, alors empêcher le mot comme terme de recherche est un bon gardien, bien qu'il ne soit certes pas une méthode infaillible. Obtenir la liste des mots en premier lieu est la vraie question.
Je fais donc vraiment référence à un moyen de comprendre qu'un seul jeton est sale ou non, puis simplement le refuser. Je ne prendrais pas la peine d'empêcher un sentiment comme la référence totalement hilarante à la "girafe à long cou". Vous ne pouvez rien y faire. :)
la source
Réponses:
Filtres d'obscénité: mauvaise idée ou mauvaise idée incroyablement interchangeable?
En outre, on ne peut pas oublier The Untold History of Toontown's SpeedChat , où même en utilisant une "liste blanche de mots sûrs", un jeune de 14 ans l'a rapidement contourné avec: "Je veux coller ma girafe à long cou dans ton lapin blanc moelleux . "
Bottom line: En fin de compte, pour tout système que vous implémentez, il n'y a absolument aucun substitut à l'examen humain (que ce soit par les pairs ou autrement). N'hésitez pas à implémenter un outil rudimentaire pour vous débarrasser des drive-by, mais pour le troll déterminé, vous devez absolument avoir une approche non basée sur un algorithme.
Un système qui supprime l'anonymat et introduit la responsabilité (quelque chose que Stack Overflow fait bien) est également utile, en particulier pour aider à combattre le CADEAU de John Gabriel.
Vous avez également demandé où vous pouvez obtenir des listes de blasphèmes pour vous lancer - un projet open-source à vérifier est Dansguardian - consultez le code source pour leurs listes de blasphèmes par défaut. Il existe également une liste de phrases tierce supplémentaire que vous pouvez télécharger pour le proxy qui peut être un point de glanage utile pour vous.
Modifier en réponse la question éditer: Merci pour la clarification sur ce que vous essayez de faire. Dans ce cas, si vous essayez simplement de faire un simple filtre de mots, vous pouvez le faire de deux manières. La première consiste à créer une seule expression régulière longue avec toutes les phrases interdites que vous souhaitez censurer, et à simplement faire une recherche / remplacement d'expression régulière avec elle. Une expression régulière comme:
et l'exécuter sur votre chaîne d'entrée en utilisant preg_match () pour tester en gros pour un hit,
ou preg_replace () pour les masquer .
Vous pouvez également charger ces fonctions avec des tableaux plutôt qu'avec une seule expression régulière longue et pour les longues listes de mots, cela peut être plus facile à gérer. Voir le preg_replace () pour quelques bons exemples sur la façon dont les tableaux peuvent être utilisés de manière flexible.
Pour des exemples de programmation PHP supplémentaires, consultez cette page pour une classe générique quelque peu avancée pour le filtrage de mots qui * est au-dessus des lettres centrales des mots censurés, et cette précédente question de débordement de pile qui a également un exemple PHP (la principale partie précieuse ici est l'approche par mots filtrés basée sur SQL - le compensateur de leet peut être supprimé si vous le trouvez inutile).
Vous avez également ajouté: " Obtenir la liste des mots en premier lieu est la vraie question. " - en plus de certains des liens Dansgaurdian précédents, vous pouvez trouver ce .zip pratique de 458 mots pour être utile.
la source
Bien que je sache que cette question est assez ancienne, mais c'est une question courante ...
Il existe à la fois une raison et un besoin distinct pour les filtres de blasphème (voir l'entrée Wikipedia ici ), mais ils sont souvent loin d'être précis à 100% pour des raisons très distinctes; Contexte et précision .
Cela dépend (entièrement) de ce que vous essayez de réaliser - au plus basique, vous essayez probablement de couvrir les " sept mots sales " et puis certains ... Certaines entreprises ont besoin de filtrer le plus basique du blasphème: de base jurer des mots, des URL ou même des informations personnelles et ainsi de suite, mais d'autres doivent empêcher les noms de compte illicites (Xbox live en est un exemple) ou bien plus encore ...
Le contenu généré par l'utilisateur ne contient pas seulement des jurons potentiels, il peut également contenir des références offensantes à:
Et potentiellement, en plusieurs langues. Shutterstock a développé des listes de mots sales de base dans 10 langues à ce jour, mais il est toujours basique et très orienté vers leurs besoins de «marquage». Il existe un certain nombre d'autres listes disponibles sur le Web.
Je suis d'accord avec la réponse acceptée selon laquelle ce n'est pas une science définie et que la langue est un défi en constante évolution mais un défi où un taux de capture de 90% est meilleur que 0%. Cela dépend uniquement de vos objectifs - de ce que vous essayez d'atteindre, du niveau de soutien dont vous disposez et de l'importance de supprimer les grossièretés de différents types.
Lors de la création d'un filtre, vous devez tenir compte des éléments suivants et de leur relation avec votre projet:
Vous pouvez facilement créer un filtre de blasphème qui capture 90% + des blasphèmes, mais vous n'atteindrez jamais 100%. Ce n'est tout simplement pas possible. Plus vous vous rapprochez de 100%, plus cela devient difficile ... Ayant construit un moteur de blasphème complexe dans le passé qui traitait plus de 500 000 messages en temps réel par jour, j'offrirais les conseils suivants:
Un filtre de base impliquerait:
Un filer moyennement complexe impliquerait, (en plus d'un filtre de base):
Un filtre complexe impliquerait un certain nombre des éléments suivants (en plus d'un filtre modéré):
la source
Je ne connais pas de bonnes bibliothèques pour cela, mais quoi que vous fassiez, assurez-vous que vous vous trompez dans le sens de laisser passer les choses. J'ai eu affaire à des systèmes qui ne me permettraient pas d'utiliser "mpassell" comme nom d'utilisateur, car il contient "ass" comme sous-chaîne. C'est un excellent moyen d'aliéner les utilisateurs!
la source
Lors d'un entretien d'embauche, la société CTO qui m'interviewait a essayé un jeu de mots / web que j'ai écrit en Java. Sur une liste de mots de tout le dictionnaire anglais d'Oxford, quel a été 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 toujours eu l'offre d'emploi, mais j'ai ensuite retrouvé une liste de mots grossiers (pas différent de celui-ci ) et écrit un script rapide pour générer un nouveau dictionnaire sans tous les mauvais mots (sans même avoir à regarder la liste) .
Pour votre cas particulier, je pense que comparer la recherche à de vrais mots ressemble à la façon de procéder avec une liste de mots comme ça. Les styles / ponctuation alternatifs nécessitent un peu plus de travail, mais je doute que les utilisateurs l'utilisent assez souvent pour être un problème.
la source
un système de filtrage des blasphèmes ne sera jamais parfait, même si le programmeur est coquin et se tient au courant de tous les développements nus
cela dit, toute liste de «mots coquins» est susceptible de fonctionner aussi bien que toute autre liste, car le problème sous-jacent est la compréhension du langage qui est à peu près insoluble avec la technologie actuelle
ainsi, la seule solution pratique est double:
la source
La seule façon d'empêcher toute entrée utilisateur offensante est d'empêcher toute entrée utilisateur.
Si vous insistez pour autoriser l'entrée des utilisateurs et avez besoin de modération, intégrez des modérateurs humains.
la source
Jetez un coup d'œil au service Web de filtre de blasphème de CDYNE
Test de l'URL
la source
En ce qui concerne votre sous-question "tromper le système", vous pouvez gérer cela en normalisant à la fois la liste des "mauvais mots" et le texte saisi par l'utilisateur avant d'effectuer votre recherche. par exemple, utilisez une série d'expressions régulières (ou tr si PHP en dispose) pour convertir [z $ 5] en "s", [4 @] en "a", etc., puis comparez la liste normalisée des "mauvais mots" avec la liste normalisée texte. Notez que la normalisation pourrait potentiellement conduire à des faux positifs supplémentaires, bien que je ne puisse penser à aucun cas réel pour le moment.
Le plus grand défi consiste à trouver quelque chose qui permettra aux gens de citer «Le stylo est plus puissant que l'épée» tout en bloquant les «pénis».
la source
Méfiez-vous des problèmes de localisation: ce qui est un juron dans une langue peut être un mot parfaitement normal dans une autre.
Un exemple actuel de cela: ebay utilise une approche de dictionnaire pour filtrer les "mauvais mots" des commentaires. Si vous essayez d'entrer la traduction allemande de "c'était une transaction parfaite" ("das war eine perfekte Transaktion"), ebay rejettera les commentaires en raison de mauvais mots.
Pourquoi? Parce que le mot allemand pour "était" est "guerre", et "guerre" est dans le dictionnaire ebay de "mauvais mots".
Méfiez-vous donc des problèmes de localisation.
la source
Si vous pouvez faire quelque chose comme Digg / Stackoverflow où les utilisateurs peuvent voter / marquer du contenu obscène ... faites-le.
Ensuite, tout ce que vous devez faire est d'examiner les utilisateurs "méchants" et de les bloquer s'ils enfreignent les règles.
la source
Je suis un peu en retard à la fête, mais j'ai une solution qui pourrait fonctionner pour certains qui liront ceci. C'est en javascript au lieu de php, mais il y a une raison valable pour cela.
Quoi qu'il en soit.
L'approche que j'ai choisie consiste à permettre à un utilisateur de "s'inscrire" à son filtrage de propos grossiers. Fondamentalement, le blasphème sera autorisé par défaut, mais si mes utilisateurs ne veulent pas le lire, ils n'ont pas à le faire. Cela permet également de résoudre le problème "l33t sp3 @ k".
Le concept est simple jqueryplugin qui est injecté par le serveur si le compte du client active le filtrage des jurons. De là, ce ne sont que quelques lignes simples qui effacent les jurons.
Voici la page de démonstration
https://chaseflorell.github.io/jQuery.ProfanityFilter/demo/
résultat
la source
a$$
a$$
, vous l'ajoutez à la liste de filtres.J'ai collecté 2200 mauvais mots dans 12 langues: en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, it, ja, ko, nl, no, pl, pt, ru, sv , th, tlh, tr, zh.
Les options de vidage MySQL, JSON, XML ou CSV sont disponibles.
https://github.com/turalus/openDB
Je vous suggère d'exécuter ce SQL dans votre base de données et de vérifier à chaque fois que l'utilisateur entre quelque chose.
la source
Non. Cela conduit juste à des problèmes. Une expérience personnelle clbuttic que j'ai avec les filtres de blasphème est le moment où j'ai été expulsé / banni d'un canal IRC pour avoir mentionné que je "me dirigeais vers Hancock pendant quelques heures" ou quelque chose dans ce sens.
la source
Je suis d'accord avec le post de HanClinto plus haut dans cette discussion. J'utilise généralement des expressions régulières pour faire correspondre le texte d'entrée par chaîne. Et c'est un effort vain, car, comme vous l'avez mentionné à l'origine, vous devez explicitement tenir compte de chaque forme d'écriture astucieuse populaire sur le net dans votre liste "bloquée".
Soit dit en passant, alors que d'autres débattent de l'éthique de la censure, je dois convenir qu'une certaine forme est nécessaire sur le web. Certaines personnes aiment simplement publier de la vulgarité, car elle peut être instantanément offensante pour un grand nombre de personnes et ne nécessite absolument aucune réflexion de la part de l'auteur.
Merci pour les idées.
Règles de HanClinto!
la source
Une fois que vous avez un bon tableau MYSQL de quelques mauvais mots que vous souhaitez filtrer (j'ai commencé avec l'un des liens de ce fil), vous pouvez faire quelque chose comme ceci:
Je suis sûr qu'il existe un moyen plus efficace de faire tous ces remplacements, mais je ne suis pas assez intelligent pour le comprendre (et cela semble fonctionner correctement, bien que de manière inefficace).
Je pense que vous devriez préférer autoriser les utilisateurs à s'inscrire et utiliser des humains pour filtrer et ajouter à votre table de blasphème si nécessaire. Bien que tout dépend du coût d'un faux positif (mot correct signalé comme mauvais) par rapport à un faux négatif (le mauvais mot passe). Cela devrait en fin de compte régir à quel point vous êtes agressif ou conservateur dans votre stratégie de filtrage.
Je serais également très prudent si vous souhaitez utiliser des caractères génériques, car ils peuvent parfois se comporter de manière plus onéreuse que vous ne le pensez.
la source
Franchement, je leur laisserais les mots "tromper le système" et les interdirais à la place, ce qui est juste moi. Mais cela simplifie également la programmation.
Ce que je ferais, c'est d'implémenter un filtre regex comme ceci:
/[\s]dooby (doo?)[\s]/i
ou il le mot est préfixé sur les autres,/[\s]doob(er|ed|est)[\s]/
. Cela empêcherait le filtrage de mots comme assuaged, ce qui est parfaitement valide, mais nécessiterait également la connaissance des autres variantes et la mise à jour du filtre réel si vous en apprenez un nouveau. Évidemment, ce sont tous des exemples, mais vous devez décider comment le faire vous-même.Je ne vais pas taper tous les mots que je connais, pas quand je ne veux pas vraiment les connaître.
la source
Je suis d'accord avec la futilité du sujet, mais si vous devez avoir un filtre, consultez Ning's Boxwood :
Consultez également cet article de blog pour plus de détails:
la source
J'ai conclu, afin de créer un bon filtre de blasphème, nous avons besoin de 3 composants principaux, ou du moins c'est ce que je vais faire. Ce sont:
Un bonus, ce sera de récompenser en quelque sorte ceux qui contribuent avec des reporters d'abus précis et punir le contrevenant, par exemple suspendre leurs comptes.
la source
Aussi tard dans le jeu, mais en faisant des recherches et en tombant ici. Comme d'autres l'ont mentionné, il est presque presque impossible s'il était automatisé, mais si votre conception / exigence peut impliquer dans certains cas (mais pas tout le temps) des interactions humaines pour vérifier si elle est profane ou non, vous pouvez envisager le ML. https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity est mon choix actuel en ce moment pour plusieurs raisons:
Pour mon besoin, il était / est basé sur un service commercial accessible au public (OK, jeux vidéo) dont les autres utilisateurs peuvent / verront le nom d'utilisateur, mais la conception nécessite qu'il doive passer par un filtre de blasphème pour rejeter le nom d'utilisateur offensant. La partie triste à ce sujet est que le problème classique "clbuttic" se produira probablement car les noms d'utilisateur sont généralement un seul mot (jusqu'à N caractères) de plusieurs mots parfois concaténés ... Encore une fois, le service cognitif de Microsoft ne signalera pas "Assist" comme texte. HasProfanity = true mais peut signaler qu'une des catégories de probabilité est élevée.
Comme l'OP s'enquiert, qu'en est-il de "a $$", voici un résultat quand je l'ai passé à travers le filtre:, comme vous pouvez le voir, il a déterminé qu'il n'est pas profane, mais il a une forte probabilité qu'il le soit, donc des indicateurs comme recommandations de l'examen (interactions humaines).
Lorsque la probabilité est élevée, je peux revenir "Je suis désolé, ce nom est déjà pris" (même s'il ne l'est pas) afin qu'il soit moins offensant pour les personnes anti-censure ou quelque chose, si nous ne voulons pas pour intégrer l'examen humain, ou retourner "Votre nom d'utilisateur a été notifié au service des opérations en direct, vous pouvez attendre que votre nom d'utilisateur soit examiné et approuvé ou choisi un autre nom d'utilisateur". Ou peu importe...
Soit dit en passant, le coût / prix de ce service est assez faible pour mon objectif (à quelle fréquence le nom d'utilisateur est-il changé?), Mais encore une fois, pour OP, la conception nécessite peut-être des requêtes plus intensives et peut ne pas être idéale pour payer / s'abonner ML-services, ou ne peut pas avoir d'examen humain / interactions. Tout dépend de la conception ... Mais si la conception correspond à la facture, cela peut peut-être être la solution d'OP.
Si cela m'intéresse, je peux énumérer les inconvénients dans le commentaire à l'avenir.
la source
Les filtres de blasphème sont une mauvaise idée. La raison en est que vous ne pouvez pas attraper chaque juron. Si vous essayez, vous obtenez des faux positifs.
Mots captivants
Disons simplement que vous voulez attraper le F-Word. Facile, non? Voyons voir.
Vous pouvez parcourir une chaîne pour trouver "fuck". Malheureusement, les gens trompent les filtres de nos jours. Le filtre de blasphème n'a pas détecté "fuk".
On peut essayer de vérifier plusieurs orthographes et variantes du mot, mais cela ralentira les performances de votre code. Pour attraper le F-Word, vous devez rechercher "fuc", "Fuc", "fuk", "Fuk", "F ***", etc. Et la liste s'allonge encore et encore.
Éviter l'innocence
D'accord, alors comment le rendre insensible à la casse et ignorer les espaces pour qu'il attrape "F u C k"? Cela peut sembler une bonne idée, mais quelqu'un peut simplement contourner le filtre de blasphème avec "FUCK"
Vous ignorez la ponctuation.
Maintenant, c'est un vrai problème, car une phrase comme " Hell o, là!" va ramasser comme "enfer" et "Wh ass up?" ramasse comme "cul".
Et il y a un tas de mots que vous devez exclure du filtre, tels que "Cont tit ution", car il y a "tit" dedans.
Les gens peuvent également utiliser des mots de substitution, tels que «Frack». Tu bloques ça aussi? Qu'en est-il du "stylo" pour "pénis"? Votre programme n'a pas d'intelligence artificielle pour savoir si la chaîne est bonne ou mauvaise.
N'utilisez pas de filtres de blasphème. Ils sont difficiles à développer et ils sont aussi lents qu'une exploration.
la source
Non.
Car:
Edit: Bien que je sois d'accord avec le commentateur qui a dit "la censure est mauvaise", ce n'est pas la nature de cette réponse.
la source