Comment implémentez-vous un bon filtre de blasphème?


208

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


12
Il est dommage que toutes les meilleures réponses soient des détournements existentiels et défaitistes du défi de programmation. Avec les services de calcul "cyborg" comme Mechanical Turk qui gagnent du terrain, et presque tous les logiciels deviennent sociaux, il est plus important que jamais d'avoir une heuristique pour signaler le contenu et le porter à l'attention d'un modérateur!
JasonSmith

10
Veuillez faire attention au contexte linguistique, surtout si vous utilisez i18n. J'ai essayé une fois de créer un groupe Google pour le cours que je donnais, appelé "Sanal ortamda görselleştirme", qui est turc pour "Visualization in virtual media". Google a été assez stupide pour le rejeter car le titre contenait le mot "anal" . Sanal [tr] = Virtual [en] et Google m'ont accusé sans vergogne de profanation! : D S'il vous plaît ne laissez pas des choses étranges comme ça se produire.
edgerunner

Et si vous recherchez le mot en espagnol ? Vous pouvez réellement contourner le filtre Google Images de cette façon (si vous êtes localisé dans une autre langue).
new123456

Une autre suggestion serait de NE PAS interdire ces mots, mais d'enregistrer les utilisateurs qui les utilisent. Si un utilisateur / IP obtient plus de 2, 3 ou tout ce que vous voulez, bloquez cette personne. Pas infaillible non plus, mais je pense qu'il est beaucoup plus gênant d'être bloqué et de changer d'utilisateur / IP / les deux que d'écrire «lapin blanc moelleux» au lieu de «chatte». Une partie, les utilisateurs ne savent pas quels mots ou expressions ils ne peuvent pas utiliser, ils ne peuvent donc pas deviner simplement les mauvais mots différents aussi facilement lorsqu'ils sont interdits.
Francisco Presencia

1
Les filtres de blasphème sont une mauvaise idée. Il est très difficile de faire la différence entre quelqu'un qui essaie de tromper le système ("Fudge you!") Et quelqu'un qui parle légitimement de quelque chose de totalement approprié ("I like chocolate fudge.")
clickbait

Réponses:


177

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:

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

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.


@JPLemme: Oui, cela devrait - j'aurais dû ajouter [sic] après, car c'est ainsi qu'Atwood l'a orthographié. :)
HanClinto

"Club Penguin" ajoute chaque jour des centaines d'entrées à son filtre de blasphème : raphkoster.com/2008/05/09/…
Frank Farmer

6
Un wrapper de limite de mot autour de vos options d' expression régulière empêcherait l' erreur
clbuttic

@ck: Seulement si vous n'êtes pas inquiet de pouvoir filtrer les mots mal orthographiés "F * ckkkk yo 'asssss" :) Je ne suis pas sûr de faire confiance à mes trolls pour avoir une orthographe très précise.
HanClinto

1
Si vous souhaitez entendre l'histoire "Fluffy White Bunny" de la bouche du cheval proverbial, c'est un épisode de podcast maintenant: socialmediaclarity.tumblr.com/post/70499341079/…
F. Randall Farmer

44

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 à:

  • Actes sexuels
  • Orientation sexuelle
  • Religion
  • Ethnicité
  • Etc...

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:

  • Mots / phrases
  • Acronymes (FOAD / LMFAO etc.)
  • Faux positifs (mots, lieux et noms comme «mishit», «scunthorpe» et «titsworth»)
  • URL (les sites pornographiques sont une cible évidente)
  • Informations personnelles (email, 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 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:

  • Construire une liste de blasphèmes applicables
  • Développer une méthode de traitement des dérivations de blasphèmes

Un filer moyennement complexe impliquerait, (en plus d'un filtre de base):

  • Utilisation d'un filtrage complexe pour gérer les dérivations étendues (à l'aide d'expressions regex avancées)
  • Traiter avec Leetspeak (l33t)
  • Faire face aux faux positifs

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

  • Listes blanches et listes noires
  • Filtrage par inférence bayésienne naïve des phrases / termes
  • Fonctions Soundex (où un mot sonne comme un autre)
  • Distance Levenshtein
  • Stemming
  • Des modérateurs humains pour aider à guider un moteur de filtrage pour apprendre par l'exemple ou lorsque les correspondances ne sont pas assez précises sans guidage (un système qui s'améliore continuellement)
  • Peut-être une forme de moteur AI

28

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!


17
ou interdire "cockpit" dans un jeu de vaisseaux spatiaux volants
Shinhan

24

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.


8
Hors sujet, mais quel est le mot le plus grossier? Je l'ai toujours considéré comme le mot c ou le mot n, mais je suppose que les gens pensent que le mot f est
Jeff

2
"Je doute que les utilisateurs l'utilisent assez souvent pour poser problème" Gardez espoir. Une fois que les utilisateurs tomberont sur le filtre, ils travailleront à trouver des moyens de contourner. Cela pourrait être aussi simple que de remplacer des lettres par des chiffres pour un placement impair d'espaces, etc.).
BryanH

21

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:

  1. soyez prêt à mettre à jour votre dictionnaire fréquemment
  2. embaucher un éditeur humain pour corriger les faux positifs (par exemple "clbuttic" au lieu de "classique") et les faux négatifs (oups! manqué un!)

1
Il suffit de détecter le mot avec des espaces de chaque côté, point après, non?
David D

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

14

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.



7

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


14
N'oubliez pas experts-exchange.com et pen-island.com; ces URL de site ne contenaient pas de tirets.
BryanH

7

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.


6

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.


4

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.

Divulgation complète, j'ai écrit ce plugin ...

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 plugin 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/

<div id="foo">
    ass will fail but password will not
</div>

<script>
    // code:
    $('#foo').profanityFilter({
        customSwears: ['ass']
    });
</script>

résultat

*** échouera mais pas le mot de passe


Voici une démo de travail jsFiddle pour accompagner cette réponse.
Chase Florell

Très naïf. N'a pas filtréa$$
Ailier Sendon le

3
@EmperorAiman, il n'a jamais été destiné à filtrer les paroles de l33t . Je ne recommande pas d'essayer de filtrer cela, car c'est une bataille perdue. Le filtre de blasphème que j'ai publié est "conçu pour permettre aux utilisateurs de" s'inscrire "au filtrage des blasphèmes". ce qui signifie qu'il est préférable de l'utiliser sur un site qui autorise le blasphème par défaut. Si vous souhaitez filtrer a$$, vous l'ajoutez à la liste de filtres.
Chase Florell

4

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.


2

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.


2

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!


2

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:

$errors = array();  //Initialize error array (I use this with all my PHP form validations)

$SCREENNAME = mysql_real_escape_string($_POST['SCREENNAME']); //Escape the input data to prevent SQL injection when you query the profanity table.

$ProfanityCheckString = strtoupper($SCREENNAME); //Make the input string uppercase (so that 'BaDwOrD' is the same as 'BADWORD').  All your values in the profanity table will need to be UPPERCASE for this to work.

$ProfanityCheckString = preg_replace('/[_-]/','',$ProfanityCheckString); //I allow alphanumeric, underscores, and dashes...nothing else (I control this with PHP form validation).  Pull out non-alphanumeric characters so 'B-A-D-W-O-R-D' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/1/','I',$ProfanityCheckString); //Replace common numeric representations of letters so '84DW0RD' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/3/','E',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/4/','A',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/5/','S',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/6/','G',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/7/','T',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/8/','B',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/0/','O',$ProfanityCheckString); //Replace ZERO's with O's (Capital letter o's).

$ProfanityCheckString = preg_replace('/Z/','S',$ProfanityCheckString); //Replace Z's with S's, another common substitution.  Make sure you replace Z's with S's in your profanity database for this to work properly.  Same with all the numbers too--having S3X7 in your database won't work, since this code would render that string as 'SEXY'.  The profanity table should have the "rendered" version of the bad words.

$CheckProfanity = mysql_query("SELECT * FROM DATABASE.TABLE p WHERE p.WORD = '".$ProfanityCheckString."'");
if(mysql_num_rows($CheckProfanity) > 0) {$errors[] = 'Please select another Screen Name.';} //Check your profanity table for the scrubbed input.  You could get real crazy using LIKE and wildcards, but I only want a simple profanity filter.

if (count($errors) > 0) {foreach($errors as $error) {$errorString .= "<span class='PHPError'>$error</span><br /><br />";} echo $errorString;} //Echo any PHP errors that come out of the validation, including any profanity flagging.


//You can also use these lines to troubleshoot.
//echo $ProfanityCheckString;
//echo "<br />";
//echo mysql_error();
//echo "<br />";

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.


1

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.


1

Je suis d'accord avec la futilité du sujet, mais si vous devez avoir un filtre, consultez Ning's Boxwood :

Boxwood est une extension PHP pour le remplacement rapide de plusieurs mots dans un morceau de texte. Il prend en charge la correspondance sensible à la casse et à la casse. Il nécessite que le texte sur lequel il opère soit codé en UTF-8.

Consultez également cet article de blog pour plus de détails:

Avec Boxwood, votre liste de termes de recherche peut être aussi longue que vous le souhaitez - l'algorithme de recherche et de remplacement ne ralentit pas avec plus de mots sur la liste de mots à rechercher. Il fonctionne en créant un trie de tous les termes de recherche, puis scanne votre texte sujet une seule fois, en parcourant les éléments du trie et en les comparant aux caractères de votre texte. Il prend en charge US-ASCII et UTF-8, la correspondance sensible à la casse ou insensible, et possède une logique de vérification des limites de mots centrée sur l'anglais.


1

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:

  1. Le filtre: un service d'arrière-plan qui vérifie par rapport à une liste noire, un dictionnaire ou quelque chose comme ça.
  2. Ne pas autoriser le compte anonyme
  3. Signaler un abus

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.


1

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:

  • Prend en charge de nombreuses localisations
  • Ils continuent à mettre à jour la base de données, donc je n'ai pas à me tenir au courant des derniers argots ou langues (problème de maintenance)
  • Lorsqu'il y a une forte probabilité (soit 90% ou plus), vous pouvez simplement la nier de manière pragmatique
  • Vous pouvez observer pour une catégorie qui provoque un drapeau qui peut être ou non un blasphème, et peut demander à quelqu'un de l'examiner pour enseigner qu'il est ou non profane.

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:, entrez la description de l'image icicomme 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.


-2

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.


2
-1 ne répond pas à la question OP et est principalement un commentaire d'opinion. Il existe de nombreux cas d'utilisation valides pour cet utilitaire. Par exemple, nettoyer le code source avant un audit afin que l'entreprise ne soit pas gênée.
davidjmcclelland

-3

Non.

Car:

  • Clbuttic
  • Le blasphème n'est pas OMG EVIL
  • Le blasphème ne peut pas être défini efficacement
  • La plupart des gens n'apprécient probablement pas d'être «protégés» des profanes

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.


90
10 votes positifs pour cette non-réponse? Comme si quelqu'un qui voulait filtrer le blasphème devait être un demi-esprit moralisateur? Bon chagrin. C'est une question valide et les réponses en voiture sournoises ne devraient pas être récompensées. -1.
Kluge

12
@Kludge: Vous êtes le seul à avoir dit "moralisant la moitié de l'esprit", en fait, je n'ai rien dit sur la nature morale de la mise en œuvre d'un filtre de blasphème. Mitch évoque une partie de la raison pour laquelle j'ai dit "ne fais pas", et ce n'est pas un drive-in snarky. Parfois "non" est la bonne réponse à "comment puis-je ...?" [suite]
paupières

2
@eyelidlessness: Vous avez peut-être raison de dire que j'ai trop lu dans votre réponse en un seul mot. Mais puisque vous n'avez pas élaboré, je ne pouvais pas dire si vos objections étaient fondées sur des motifs moraux ou techniques. J'avoue que j'en ai assez des commentaires "la censure sous toutes ses formes est mauvaise".
Kluge

5
-1. "Ne pas" n'est pas une réponse valable indépendamment des problèmes moraux ou techniques. Il y a de nombreuses fois où il est parfaitement approprié de filtrer le contenu en fonction de la nature du contenu. Imaginez un site de commerce électronique vendant des sous-vêtements féminins et offrant une fonction «Avis». Voulez-vous vraiment des garçons prépubères jonchent votre site de déchets? Bien sûr que non. Et c'est peut-être trop lourd d'avoir un processus d'approbation humaine. Un simple filtre pour refuser les avis avec des ordures est une bonne chose.
pspahn

3
@pspahn, "ne pas" est la bonne réponse à toute question demandant une solution au mauvais problème. Il y a certainement des cas valables où le contenu doit être modéré, mais un "filtre de blasphème" ne l'est pas.
paupières
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.