Question

Comment vous avez comme les individus d'esprit le défi fondamental abordé des jurons de filtrage, de toute évidence, on ne peut peut-être s'attaquer tous les scénarios, mais ce serait bien d'avoir un au niveau le plus élémentaire en tant que première ligne de défense.

Obj-c J'ai

NSString *tokens = [text componentsSeparatedByString:@" "];

Et puis la boucle I à chaque jeton pour voir si l'un des mots-clés (j'ai 400 dans une liste) se trouvent dans chaque jeton.

Réalisant faux positifs sont aussi un problème, si le mot est un match parfait, son signalée comme jurons autrement si plus de 3 mots avec jurons sont trouvés sans correspondances parfaites, il est également marqué comme jurons.

Plus tard, je vais utiliser un webservice qui aborde le problème plus précisément, mais je vraiment juste besoin de base de quelque chose. Donc, si vous avez écrit le mot pénis il irait yup méchant vilain, mauvais mot écrit.

Était-ce utile?

La solution

J'ai juste une suggestion pour tokenizing la chaîne. Vos moyens fonctionne bien si les mots sont tous séparés par des chaînes, mais qui est rarement le cas dans la plupart des scénarios d'utilisation que vous auriez normalement à traiter, la ponctuation, des sauts de ligne etc. Essayez si vous êtes intéressé:

NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];

[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSArray *words = [bigString componentsSeparatedByCharactersInSet:separators];

Source: http: //www.tech-recipes.com/rx/3418/cocoa-explode-break-nsstring-into-individual-words/

Autres conseils

Filtres: Obscenity? Bad Idea, ou Incroyablement Intercoursing Bad Idea

Jeff a un article intéressant à considérer avant de se lancer dans un tel morceau de code:

  

http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html

Eh bien, à la recherche de cette manière est certainement pas la façon la plus efficace de rechercher des jurons ... une approche plus efficace serait de construire un automate à états finis pour détecter les mots, et exécuter le texte une fois par cette FSA. Vous n'avez pas vraiment besoin de chaînes fendus pour trouver jurons, et tout ce que le fractionnement supplémentaire et l'allocation AJOUTE copie frais généraux que vous n'avez pas besoin. En outre, il peut y avoir des modèles communs dans certains des mots mis à l'index, que vous n'êtes pas exploiter en cherchant chaque mot individuellement.

Cela dit, je pense que 400 mots est beaucoup. Qui, exactement, est votre public? Que faire si un utilisateur a une question médicale? Au cas où ces questions soient effectivement refusées? Je ne peux penser à une poignée de mots qui seraient considérés comme profanes dans un contexte, vous voudrez peut-être repenser le filtrage.

A deux choses:

  • FSA ne fonctionnera pas nécessairement en fonction de la façon intelligente que vous voulez que le filtre à
  • Regex sont généralement très lent en fonction du nombre que vous voulez exécuter
  • 400 mots est un peu faible, en fonction de vos besoins et langauges
  • Il y a un certain nombre de cas extrêmement difficiles à faire attention lors du filtrage, en particulier l'intégration de mots tels que « Présumer »

Mon entreprise, Inversoft, construit une solution de filtrage commercial et il est tout à fait intelligent. Il n'utilise regex ou FSA, mais a une coutume construit la technologie de traitement rapide linéaire qui le rend extrêmement rapide et précise (plus de 4000 messages par seconde). Il a aussi plus de 600 mots anglais dans un certain nombre de catégories, y compris Slang, raciale Slurs, drogue, Gang, religieux, etc.

Si vous êtes à la recherche d'une solution intelligente sensible au contexte avec le soutien, vous devriez vérifier Clean Speak de Inversoft. Le brancher à Obj-C doit être simple en utilisant le WebService XML.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top