Frage

Wie haben Sie gleichgesinnten Menschen die grundlegende Herausforderung des Filtern Profanität in Angriff genommen, offensichtlich kann man möglicherweise nicht jedes Szenario angehen, aber es wäre schön, einen als erste Verteidigungslinie auf der grundlegendsten Ebene zu haben.

In Obj-c Ich habe

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

Und dann ich Schleife durch jedes Token, wenn eine der Schlüsselwort zu sehen (ich habe in einer Liste etwa 400 vor) sind in jedem Token gefunden.

Die Realisierung Falsch positive Ergebnisse ist auch ein Problem, wenn das Wort eine perfekte Übereinstimmung ist, markierte sein als Gotteslästerung ansonsten, wenn mehr als drei Worte mit Profanität gefunden werden, ohne perfekten Treffer ist es auch als Gotteslästerung gekennzeichnet ist.

Später ich eine Webservice nutzen, die packt das Problem genauer gesagt, aber ich wirklich nur etwas Grundsätzliches brauchen. Also, wenn Sie das Wort schreiben Penis es gehen würde yup ungezogen ungezogen, schlechtes Wort geschrieben.

War es hilfreich?

Lösung

Ich habe nur einen Vorschlag für Zeichenüber der Zeichenfolge. Ihre Wege funktioniert gut, wenn die Worte sind alle von Zeichenketten getrennt, aber das ist selten der Fall in den meisten Anwendungsszenarien, wie man es normalerweise mit Zeilenumbrüche zu tun haben, Zeichensetzung, usw. die Sie interessieren, wenn Sie daran interessiert sind:

NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];

[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSArray *words = [bigString componentsSeparatedByCharactersInSet:separators];

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

Andere Tipps

Obszönität Filter: Schlechte Idee oder Incredibly Intercoursing schlechte Idee

Jeff hat einen interessanten Artikel zu prüfen, bevor sie auf einem solchen Stück Code einsteigen:

  

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

Nun, auf diese Weise der Suche ist sicherlich nicht der effizienteste Weg für Obszönitäten suchen ... ein effizienterer Ansatz wäre, einen endlichen Automaten zu konstruieren, um die Worte zu erkennen und führen Sie den Text einmal durch diese FSA. Sie nicht wirklich zu Split-Strings müssen Profanität finden, und all das Splitting sorgt für zusätzliche Zuordnung und Kopieren von Overhead, dass Sie nicht brauchen. Es kann auch gemeinsame Muster sein in einigen der schwarzen Liste Worte, die Sie nicht durch die Suche jedes Wort einzeln ausnutzen.

sagte, dass, ich glaube, 400 Wörter ziemlich viel ist. Wer genau ist Ihr Publikum? Was passiert, wenn ein Benutzer eine medizinische Frage hat? Sollten solche Fragen tatsächlich verboten werden? Ich kann nur an einer Handvoll von Worten, die profanen in jedem Kontext betrachtet werden würde, so dass Sie die Filterung zu überdenken möchten.

Ein paar Dinge:

  • FSA nicht unbedingt auf der Arbeit abhängig, wie intelligent Sie die Filter wollen
  • sein
  • Regex sind in der Regel extrem langsam, je nachdem, wie viele Sie ausführen möchten
  • 400 Wörter ist etwas niedrig, je nach Ihren Bedürfnissen und langauges
  • Es gibt eine Reihe von äußerst kniffligen Fällen vorsichtig sein beim Filtern, insbesondere von Worten Einbettung wie „annehmen“

Meine Firma, Inversoft, baut eine kommerzielle Filterlösung und es ist sehr intelligent. Es verwendet nicht regex oder FSA, hat aber eine eigene schnelle lineare Verarbeitung Technologie, die es extrem schnell und präzise (mehr als 4.000 Nachrichten pro Sekunde) macht. Es hat auch mehr als 600 englische Wörter in einer Reihe von Kategorien einschließlich Slang, Rassen Slurs, Drogen, Gang, Religion, etc.

Wenn Sie sich für eine intelligente kontextbewusste Lösung mit Unterstützung suchen, sollten Sie prüfen, reinigen Speak von Inversoft. Einhaken es Obj-C sollte mit Hilfe des XML WebService einfach sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top