Domanda

Come averti individui come mentalità affrontato la sfida fondamentale di parolacce filtraggio, ovviamente, non si può forse placcaggio tutti gli scenari, ma sarebbe bello avere uno al livello più elementare come prima linea di difesa.

In Obj-C Ho

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

E poi io ciclo attraverso ogni token per vedere se una qualsiasi delle parole chiave (Ho circa 400 in una lista) si trovano all'interno di ogni token.

Realizzare I falsi positivi sono anche un problema, se la parola è una partita perfetta, la sua contrassegnato come blasfemo altrimenti se più di 3 parole con parolacce sono trovati senza essere partite perfette è anche contrassegnato come blasfemo.

In seguito userò un webservice che affronta il problema con maggiore precisione, ma ho davvero solo bisogno di qualcosa di fondamentale. Quindi, se hai scritto la parola pene sarebbe andata proprio così cattivo cattivo, cattivo parola scritta.

È stato utile?

Soluzione

Ho appena ha un suggerimento per la creazione di token della stringa. I suoi modi funziona bene se le parole sono separate da archi, ma che è raramente il caso nella maggior parte degli scenari di utilizzo come si farebbe normalmente avere a che fare con i ritorni a capo, la punteggiatura, ecc Prova questo, se siete interessati:

NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];

[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSArray *words = [bigString componentsSeparatedByCharactersInSet:separators];

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

Altri suggerimenti

Filtri Obscenity:? Cattiva idea, o incredibilmente Intercoursing Bad Idea

Jeff ha un articolo interessante considerare prima di intraprendere un tale pezzo di codice:

  

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

Bene, la ricerca in quel modo non è certamente il modo più efficace per la ricerca di profanità ... un approccio più efficace sarebbe quella di costruire un automa a stati finiti per individuare le parole, ed eseguire il testo una volta attraverso quella FSA. Non avete davvero bisogno di stringhe di divisione per trovare parolacce, e tutto ciò che la divisione aggiunge allocazione in più e la copia in testa che non è necessario. Inoltre, ci possono essere modelli comuni in alcune delle parole nella lista nera, che non stanno sfruttando ricercando ogni singola parola.

Detto questo, penso che 400 parole è un bel po '. Chi, esattamente, è il vostro pubblico? Che cosa succede se un utente ha una domanda medica? Qualora tali questioni in realtà essere annullato? Posso solo pensare di una manciata di parole che sarebbero considerati profani in qualsiasi contesto, così si potrebbe desiderare di ripensare il filtraggio.

Un paio di cose:

  • FSA non sarà necessariamente di lavoro a seconda di quanto intelligente si desidera che il filtro sia
  • Regex sono generalmente estremamente lento a seconda di quanti si desidera eseguire
  • 400 parole è un po 'bassa, a seconda delle vostre esigenze e linguaggi
  • Ci sono un certo numero di casi estremamente difficili fare attenzione quando si filtra, in particolare l'incorporamento di parole quali "supporre"

La mia azienda, Inversoft, costruisce una soluzione di filtraggio commerciale ed è abbastanza intelligente. Non usa regex o FSA, ma è un personalizzato costruito tecnologia di elaborazione rapida lineare che rende estremamente veloce e preciso (oltre 4.000 messaggi al secondo). Essa ha anche più di 600 parole in inglese in una serie di categorie, tra cui Slang, razziale Legature, droga, Gang, religiosi, ecc.

Se siete alla ricerca di una soluzione context-aware intelligenti con il supporto, si dovrebbe verificare Clean parlare dal Inversoft. Agganciandolo fino a Obj-C dovrebbe essere semplice utilizzando il servizio Web XML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top