Come si implementa un buon filtro volgarità?


208

Molti di noi devono occuparsi dell'input dell'utente, delle query di ricerca e delle situazioni in cui il testo di input può potenzialmente contenere volgarità o linguaggio indesiderato. Spesso questo deve essere filtrato.

Dove si può trovare un buon elenco di parolacce in varie lingue e dialetti?

Sono disponibili API per le fonti che contengono buoni elenchi? O forse un'API che dice semplicemente "sì, questo è pulito" o "no, questo è sporco" con alcuni parametri?

Quali sono alcuni buoni metodi per catturare persone che cercano di ingannare il sistema, come $$, azz o a55?

Punti bonus se offri soluzioni per PHP. :)

Modifica: risposta a risposte che dicono semplicemente evitare il problema programmatico:

Penso che ci sia un posto per questo tipo di filtro quando, ad esempio, un utente può utilizzare la ricerca di immagini pubbliche per trovare immagini che vengono aggiunte a un pool di comunità sensibili. Se riescono a cercare "pene", probabilmente otterranno molte foto di, sì. Se non vogliamo immagini di questo, quindi impedire la parola come termine di ricerca è un buon guardiano, anche se, certamente, non è un metodo infallibile. Ottenere la lista di parole in primo luogo è la vera domanda.

Quindi mi riferisco davvero a un modo per capire che un singolo token è sporco o no e quindi semplicemente non lo autorizzo. Non mi preoccuperei di prevenire un sentimento come il riferimento esilarante della "giraffa dal collo lungo". Niente che tu possa fare lì. :)


12
È un peccato che tutte le risposte migliori siano deviazioni esistenziali e disfattiste dalla sfida della programmazione. Con i servizi informatici "cyborg" come Mechanical Turk che stanno guadagnando terreno, e quasi tutti i software diventano social, è più importante che mai avere un'euristica per contrassegnare in rosso i contenuti e portarli all'attenzione di un moderatore!
JasonSmith,

10
Si prega di fare attenzione al contesto linguistico, specialmente se si sta eseguendo i18n. Una volta ho provato a creare un gruppo Google per il corso che tenevo chiamato "Sanal ortamda görselleştirme", che è turco per "Visualizzazione nei media virtuali". Google è stato abbastanza stupido da rifiutarlo perché il titolo conteneva la parola "anale" . Sanal [tr] = Virtual [en] e Google mi hanno spudoratamente accusato di volgarità! : D Per favore, non lasciare che accadano cose strane come questa.
edgerunner,

E se cercassi la parola in spagnolo ? Puoi effettivamente aggirare il filtro di Google Immagini in questo modo (se sei localizzato in un'altra lingua).
nuovo123456,

Un altro suggerimento sarebbe NON proibire queste parole, ma registrare gli utenti che le usano. Se un utente / IP ottiene più di 2, 3 o qualunque cosa tu voglia, allora blocca quella persona. Neanche a prova di errore, ma penso che sia molto più scomodo essere bloccati e cambiare utente / IP / entrambi piuttosto che scrivere "soffice coniglietto bianco" invece di "figa". Una parte, gli utenti non sanno QUALI parole o espressioni che non possono usare, quindi non possono semplicemente indovinare diverse parolacce così facilmente quando vengono bandite.
Francisco Presencia,

1
I filtri volgarità sono una cattiva idea. È molto difficile distinguere tra qualcuno che sta cercando di ingannare il sistema ("Fudge you!") E qualcuno che parla legittimamente di qualcosa di totalmente appropriato ("Mi piace il fondente al cioccolato")
clickbait

Risposte:


177

Filtri di oscenità: cattiva idea o cattiva idea cattiva interazione?

Inoltre, non si può dimenticare The Untold History of Toontown's SpeedChat , dove anche usando una "whitelist di parole sicure" ha portato una 14enne a aggirarlo rapidamente con: "Voglio attaccare la mia giraffa dal collo lungo sul tuo soffice coniglietto bianco ".

In conclusione: in definitiva, per qualsiasi sistema implementato, non vi è assolutamente alcun sostituto per la revisione umana (sia peer che altro). Sentiti libero di implementare uno strumento rudimentale per sbarazzarti del drive-by, ma per il troll determinato, devi assolutamente avere un approccio non basato su algoritmo.

Un sistema che rimuove l'anonimato e introduce la responsabilità (cosa che Stack Overflow fa bene) è utile anche, in particolare per aiutare a combattere il REGALO di John Gabriel

Hai anche chiesto dove puoi ottenere elenchi di volgarità per iniziare - un progetto open source da verificare è Dansguardian - controlla il codice sorgente per i loro elenchi di volgarità predefiniti. È inoltre possibile scaricare un elenco di frasi di terze parti che è possibile scaricare per il proxy e che può essere un utile punto di riferimento per l'utente.

Modifica in risposta alla domanda modifica: grazie per il chiarimento su cosa stai cercando di fare. In tal caso, se stai solo provando a fare un semplice filtro di parole, ci sono due modi per farlo. Uno è quello di creare una singola regexp lunga con tutte le frasi vietate che si desidera censurare e fare semplicemente una regex per trovarla / sostituirla. Una regex come:

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

ed eseguilo sulla tua stringa di input usando preg_match () per testare all'ingrosso un hit,

o preg_replace () per cancellarli.

Puoi anche caricare queste funzioni con array piuttosto che con una singola regex lunga e, per elenchi di parole lunghe, potrebbe essere più gestibile. Vedere preg_replace () per alcuni buoni esempi su come gli array possono essere utilizzati in modo flessibile.

Per ulteriori esempi di programmazione PHP, vedi questa pagina per una classe generica un po 'avanzata per il filtraggio di parole che * è fuori dalle lettere centrali da parole censurate, e questa precedente domanda Stack Overflow che ha anche un esempio di PHP (la parte principale preziosa è l'approccio basato su parole filtrate basato su SQL - il compensatore leet-speak può essere eliminato se lo trova non necessario).

Hai anche aggiunto: " Ottenere la lista di parole in primo luogo è la vera domanda. " - Oltre ad alcuni dei precedenti collegamenti Dansgaurdiani, potresti trovare utile questo utile .zip di 458 parole.


@JPLemme: Sì, dovrebbe - avrei dovuto aggiungere [sic] in seguito, poiché è così che lo ha scritto Atwood. :)
HanClinto

"Club Penguin" aggiunge centinaia di voci al loro filtro volgarità ogni giorno : raphkoster.com/2008/05/09/…
Frank Farmer,

6
Una parola involucro confine intorno le opzioni regex impedirebbe il clbuttic errore
cjk

@ck: Solo se non sei preoccupato di poter filtrare le parole scritte male "F * ckkkk yo 'asssss" :) Non sono sicuro di fidarmi dei miei troll per avere un'ortografia molto precisa.
HanClinto,

1
Se desideri ascoltare la storia di "Fluffy White Bunny" dalla proverbiale bocca del cavallo, ora è un episodio podcast: socialmediaclarity.tumblr.com/post/70499341079/…
F. Randall Farmer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.