¿Cómo implementas un buen filtro de malas palabras?

208

Muchos de nosotros necesitamos lidiar con la entrada del usuario, las consultas de búsqueda y las situaciones en las que el texto de entrada puede contener malas palabras o lenguaje no deseado. A menudo esto necesita ser filtrado.

¿Dónde se puede encontrar una buena lista de malas palabras en varios idiomas y dialectos?

¿Hay API disponibles para las fuentes que contienen buenas listas? ¿O tal vez una API que simplemente dice "sí, esto está limpio" o "no, esto está sucio" con algunos parámetros?

¿Cuáles son algunos buenos métodos para atrapar a personas que intentan engañar al sistema, como $$, azz o a55?

Puntos de bonificación si ofrece soluciones para PHP. :)

Editar: Respuesta a respuestas que dicen simplemente evitar el problema programático:

Creo que hay un lugar para este tipo de filtro cuando, por ejemplo, un usuario puede usar la búsqueda de imágenes públicas para encontrar imágenes que se agreguen a un grupo comunitario sensible. Si pueden buscar "pene", entonces probablemente obtendrán muchas imágenes de, sí. Si no queremos imágenes de eso, entonces evitar la palabra como término de búsqueda es un buen guardián, aunque ciertamente no es un método infalible. Obtener la lista de palabras en primer lugar es la verdadera pregunta.

Así que realmente me estoy refiriendo a una forma de descubrir que un solo token está sucio o no y luego simplemente no lo permites. No me molestaría en evitar un sentimiento como la referencia totalmente hilarante de "jirafa de cuello largo". Nada que puedas hacer allí. :)

Ben Throop
fuente
12
Es una pena que todas las respuestas principales sean desviaciones existenciales y derrotistas del desafío de programación. Con los servicios computacionales "cyborg" como Mechanical Turk ganando fuerza, y casi todo el software se está volviendo social, ¡es más importante que nunca tener un contenido heurístico para marcar la bandera roja y llamar la atención de un moderador!
JasonSmith
10
Tenga cuidado con el contexto del idioma, especialmente si está haciendo i18n. Una vez intenté configurar un Grupo de Google para el curso que estaba impartiendo llamado "Sanal ortamda görselleştirme", que en turco significa "Visualización en medios virtuales". Google fue lo suficientemente estúpido como para rechazarlo porque el título contenía la palabra "anal" . ¡Sanal [tr] = Virtual [en] y Google me acusaron descaradamente de blasfemias! : D Por favor, no dejes que sucedan cosas extrañas como esta.
edgerunner
¿Qué pasa si buscas la palabra en español ? De hecho, puede desplazarse por el filtro de Google Images (si está localizado en algún otro idioma).
nuevo123456
Otra sugerencia sería NO prohibir estas palabras, sino registrar a los usuarios que las usan. Si un usuario / IP obtiene más de 2, 3 o lo que desee, bloquee a esa persona. Tampoco es infalible, pero creo que es mucho más inconveniente ser bloqueado y tener que cambiar de usuario / IP / ambos que escribir 'conejito blanco esponjoso' en lugar de 'coño'. Una parte, los usuarios no saben QUÉ palabras o expresiones no pueden usar, por lo que no pueden adivinar diferentes palabras malas tan fácilmente como se les prohíbe.
Francisco Presencia
1
Los filtros de blasfemias son una mala idea. Es muy difícil diferenciar entre alguien que intenta engañar al sistema ("¡Fudge you!") Y alguien que legítimamente habla de algo totalmente apropiado ("Me gusta el fudge de chocolate")
clickbait

Respuestas:

177

Filtros de obscenidad: ¿una mala idea o una mala idea increíblemente interesante?

Además, no se puede olvidar La historia no contada de SpeedChat de Toontown , donde incluso el uso de una "lista blanca de palabras seguras" resultó en que un niño de 14 años lo eludiera rápidamente con: "Quiero meter a mi jirafa de cuello largo en tu conejito blanco y esponjoso ".

En pocas palabras: en última instancia, para cualquier sistema que implemente, no hay absolutamente ningún sustituto para la revisión humana (ya sea por pares o de otra manera). Siéntase libre de implementar una herramienta rudimentaria para deshacerse de los drive-by's, pero para el troll determinado, absolutamente debe tener un enfoque no basado en algoritmos.

También es útil un sistema que elimine el anonimato e introduzca la responsabilidad (algo que Stack Overflow hace bien), particularmente para ayudar a combatir el REGALO de John Gabriel

También preguntó dónde puede obtener listas de blasfemias para comenzar: un proyecto de código abierto para revisar es Dansguardian , consulte el código fuente de sus listas de blasfemias predeterminadas. También hay una Lista de frases de terceros adicional que puede descargar para el proxy que puede ser un punto de ayuda útil para usted.

Edite en respuesta la edición de preguntas: Gracias por la aclaración sobre lo que está tratando de hacer. En ese caso, si solo está tratando de hacer un filtro de palabras simple, hay dos formas de hacerlo. Una es crear una expresión regular larga y única con todas las frases prohibidas que desea censurar, y simplemente hacer una búsqueda / reemplazo de expresiones regulares con ella. Una expresión regular como:

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

y ejecútelo en su cadena de entrada usando preg_match () para probar al por mayor un hit,

o preg_replace () para dejarlos en blanco.

También puede cargar esas funciones con matrices en lugar de una sola expresión regular larga, y para listas de palabras largas, puede ser más manejable. Consulte preg_replace () para ver algunos buenos ejemplos de cómo las matrices se pueden usar de manera flexible.

Para ver ejemplos de programación PHP adicionales, consulte esta página para obtener una clase genérica algo avanzada para el filtrado de palabras que * está fuera de las letras centrales de las palabras censuradas, y esta pregunta anterior sobre el desbordamiento de pila que también tiene un ejemplo de PHP (la principal parte valiosa es el enfoque de palabras filtradas basado en SQL: se puede prescindir del compensador leet-speak si lo considera innecesario).

También agregó: " Obtener la lista de palabras en primer lugar es la verdadera pregunta " . Además de algunos de los enlaces dansgaurdianos anteriores, puede encontrar útil este .zip útil de 458 palabras.

HanClinto
fuente
@JPLemme: Sí debería, debería haber agregado [sic] después, ya que así es como Atwood lo deletreó. :)
HanClinto
"Club Penguin" agrega cientos de entradas a su filtro de malas palabras todos los días : raphkoster.com/2008/05/09/…
Frank Farmer
66
Un envoltorio de límite de palabras alrededor de sus opciones de expresiones regulares evitaría el error
clbuttic
@ck: Solo si no te preocupa poder filtrar las palabras mal escritas "F * ckkkk yo 'asssss" :) No estoy seguro de confiar en que mis trolls tengan una ortografía muy precisa.
HanClinto
1
Si desea escuchar la historia de "Fluffy White Bunny" de la boca del caballo proverbial, ahora es un episodio de podcast: socialmediaclarity.tumblr.com/post/70499341079/…
F. Randall Farmer
44

Si bien sé que esta pregunta es bastante antigua, pero es una pregunta común ...

Hay una razón y una clara necesidad de filtros de blasfemias (vea la entrada de Wikipedia aquí ), pero a menudo no son 100% precisos por razones muy distintas; Contexto y precisión .

Depende (totalmente) de lo que intente lograr: en su forma más básica, probablemente esté tratando de cubrir las " siete palabras sucias " y luego algunas ... Algunas empresas necesitan filtrar la blasfemia más básica: básica palabrotas, URL o incluso información personal, etc., pero otros deben evitar los nombres ilícitos de cuentas (Xbox live es un ejemplo) o mucho más ...

El contenido generado por el usuario no solo contiene posibles malas palabras, también puede contener referencias ofensivas a:

  • Actos sexuales
  • Orientación sexual
  • Religión
  • Etnicidad
  • Etc ...

Y potencialmente, en varios idiomas. Shutterstock ha desarrollado listas básicas de palabras sucias en 10 idiomas hasta la fecha, pero sigue siendo básico y está muy orientado a sus necesidades de 'etiquetado'. Hay varias otras listas disponibles en la web.

Estoy de acuerdo con la respuesta aceptada de que no es una ciencia definida y que el lenguaje es un desafío en constante evolución , pero uno en el que una tasa de captura del 90% es mejor que el 0%. Depende exclusivamente de sus objetivos: lo que está tratando de lograr, el nivel de soporte que tiene y la importancia de eliminar las blasfemias de diferentes tipos.

Al crear un filtro, debe tener en cuenta los siguientes elementos y cómo se relacionan con su proyecto:

  • Palabras / frases
  • Acrónimos (FOAD / LMFAO, etc.)
  • Falsos positivos (palabras, lugares y nombres como 'mishit', 'scunthorpe' y 'titsworth')
  • URL (los sitios porno son un objetivo obvio)
  • Información personal (correo electrónico, dirección, teléfono, etc., si corresponde)
  • Elección de idioma (generalmente inglés por defecto)
  • Moderación (cómo, en todo caso, puede interactuar con el contenido generado por el usuario y qué puede hacer con él)

Puedes crear fácilmente un filtro de blasfemias que capture más del 90% de blasfemias, pero nunca alcanzarás el 100%. Simplemente no es posible. Cuanto más cerca quieras llegar al 100%, más difícil se vuelve ... Habiendo construido un motor blasfemo complejo en el pasado que manejaba más de 500 mil mensajes en tiempo real por día, te ofrecería los siguientes consejos:

Un filtro básico implicaría:

  • Construyendo una lista de blasfemias aplicables
  • Desarrollar un método para tratar derivaciones de blasfemias.

Un archivador moderadamente complejo implicaría, (además de un filtro básico):

  • Usando patrones complejos para lidiar con derivaciones extendidas (usando expresiones regulares avanzadas)
  • Tratar con Leetspeak (l33t)
  • Tratar con falsos positivos

Un filtro complejo implicaría una cantidad de lo siguiente (además de un filtro moderado):

nickhar
fuente
28

No conozco ninguna buena biblioteca para esto, pero hagas lo que hagas, asegúrate de equivocarte en la dirección de dejar pasar las cosas. He tratado con sistemas que no me permitirían usar "mpassell" como nombre de usuario, porque contiene "culo" como una subcadena. ¡Esa es una excelente manera de alienar a los usuarios!

Matt Passell
fuente
17
o prohibir la "cabina" en un juego de naves espaciales voladoras
Shinhan
24

Durante una entrevista de trabajo mía, el CTO de la compañía que me estaba entrevistando probó un juego de palabras / web que escribí en Java. De una lista de palabras de todo el diccionario de inglés de Oxford, ¿cuál fue la primera palabra que se llegó a adivinar?

Por supuesto, la palabra más asquerosa en el idioma inglés.

De alguna manera, todavía recibí la oferta de trabajo, pero luego rastreé una lista de palabras profanas (no muy diferente a esta ) y escribí un script rápido para generar un nuevo diccionario sin todas las malas palabras (sin siquiera tener que mirar la lista) .

Para su caso particular, creo que comparar la búsqueda con palabras reales suena como el camino a seguir con una lista de palabras como esa. Los estilos / puntuación alternativos requieren un poco más de trabajo, pero dudo que los usuarios lo usen con la suficiente frecuencia como para ser un problema.

Mateo
fuente
8
Fuera de tema, pero ¿cuál es la palabra más asquerosa? Siempre lo consideré la palabra c o la palabra n, pero supongo que la gente piensa que la palabra f es
Jeff
2
"Dudo que los usuarios lo usen con la suficiente frecuencia como para ser un problema" Mantenga viva la esperanza. Una vez que los usuarios tropiecen con el filtro, trabajarán para encontrar formas de elusión. Podría ser tan simple como reemplazar letras con números para una ubicación impar de espacios, etc.
BryanH
21

un sistema de filtrado de malas palabras nunca será perfecto, incluso si el programador es seguro y se mantiene al tanto de todos los desarrollos desnudos

Dicho esto, es probable que cualquier lista de "palabras traviesas" funcione tan bien como cualquier otra lista, ya que el problema subyacente es la comprensión del lenguaje, que es bastante difícil de resolver con la tecnología actual

entonces, la única solución práctica es doble:

  1. prepárate para actualizar tu diccionario con frecuencia
  2. contratar a un editor humano para corregir falsos positivos (por ejemplo, "clbuttic" en lugar de "clásico") y falsos negativos (¡Uy! ¡Perdió uno!)
Steven A. Lowe
fuente
1
Simplemente detecte la palabra con espacios a cada lado, punto final después, ¿no?
David D
1
H3ll no man, eso solo funciona para los casos más triviales; estamos tratando con humanos aquí, y son bastante inteligentes :)
Steven A. Lowe
14

La única forma de evitar la entrada ofensiva del usuario es evitar toda entrada del usuario.

Si insiste en permitir la entrada del usuario y necesita moderación, incorpore moderadores humanos.

Axel
fuente
7

Con respecto a su subpregunta "engañar al sistema", puede manejarlo normalizando tanto la lista de "malas palabras" como el texto ingresado por el usuario antes de realizar su búsqueda. por ejemplo, use una serie de expresiones regulares (o tr si PHP lo tiene) para convertir [z $ 5] a "s", [4 @] a "a", etc., luego compare la lista normalizada de "malas palabras" con la normalizada texto. Tenga en cuenta que la normalización podría conducir a falsos positivos adicionales, aunque no puedo pensar en ningún caso real en este momento.

El desafío más grande es encontrar algo que permita a la gente citar "El bolígrafo es más poderoso que la espada" mientras bloquea "penis".

Dave Sherohman
fuente
14
No olvide expertos-exchange.com y pen-island.com; esas URL del sitio una vez no contenían guiones.
BryanH
7

Tenga cuidado con los problemas de localización: lo que es una palabrota en un idioma puede ser una palabra perfectamente normal en otro.

Un ejemplo actual de esto: eBay utiliza un enfoque de diccionario para filtrar "malas palabras" de los comentarios. Si intenta ingresar la traducción alemana de "esta fue una transacción perfecta" ("das war eine perfekte Transaktion"), eBay rechazará los comentarios debido a malas palabras.

¿Por qué? Porque la palabra alemana para "era" es "guerra", y "guerra" está en el diccionario de eBay de "malas palabras".

Así que tenga cuidado con los problemas de localización.

Sam
fuente
6

Si puede hacer algo como Digg / Stackoverflow donde los usuarios pueden votar / marcar contenido obsceno ... hágalo.

Entonces, todo lo que necesita hacer es revisar a los usuarios "traviesos" y bloquearlos si rompen las reglas.

scunliffe
fuente
4

Llego un poco tarde a la fiesta, pero tengo una solución que podría funcionar para algunos que leen esto. Está en JavaScript en lugar de PHP, pero hay una razón válida para ello.

Divulgación completa, escribí este complemento ...

De todos modos

El enfoque que utilicé es permitir que un usuario "se suscriba" a su filtro de malas palabras. Básicamente, las blasfemias se permitirán por defecto, pero si mis usuarios no quieren leerlo, no tienen que hacerlo. Esto también ayuda con el problema "l33t sp3 @ k".

El concepto es simple plugin que el servidor inyecta si la cuenta del cliente habilita el filtro de malas palabras. A partir de ahí, son solo un par de líneas simples las que borran las palabrotas.

Aquí está la página de demostración
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>

resultado

*** fallará pero la contraseña no

Chase Florell
fuente
Aquí hay una demostración de trabajo jsFiddle para acompañar esta respuesta.
Chase Florell
Muy ingenuo No se a$$
filtró
3
@EmperorAiman ​​nunca tuvo la intención de filtrar l33t hablar . No recomiendo tratar de filtrar eso, ya que es una batalla perdida. El filtro de blasfemias que he publicado está "creado para permitir a los usuarios" aceptar "el filtro de blasfemias". lo que significa que se usa mejor en un sitio que permite malas palabras por defecto. Si desea filtrar a$$, entonces lo agrega a la lista de filtros.
Chase Florell
4

Recopilé 2200 malas palabras en 12 idiomas: 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.

Las opciones de volcado de MySQL, JSON, XML o CSV están disponibles.

https://github.com/turalus/openDB

Le sugiero que ejecute este SQL en su base de datos y verifique cada vez que el usuario ingrese algo.

Tural Ali
fuente
2

No lo hagas Simplemente lleva a problemas. Una experiencia personal clbuttic que tengo con los filtros de blasfemias es el momento en que fui expulsado / expulsado de un canal de IRC por mencionar que estaba "cruzando el puente hacia Hancock durante un par de horas" o algo por el estilo.

Adam Jaskiewicz
fuente
2

Estoy de acuerdo con la publicación de HanClinto más arriba en esta discusión. Generalmente uso expresiones regulares para hacer coincidir cadenas de texto de entrada. Y este es un esfuerzo vano, ya que, como mencionaste originalmente, tienes que dar cuenta explícitamente de cada forma trucada de escritura popular en la red en tu lista "bloqueada".

En una nota al margen, mientras que otros están debatiendo la ética de la censura, debo estar de acuerdo en que alguna forma es necesaria en la web. Algunas personas simplemente disfrutan publicar vulgaridad porque puede ser instantáneamente ofensivo para un gran grupo de personas, y no requiere absolutamente ningún pensamiento por parte del autor.

Gracias por las ideas.

HanClinto gobierna!


fuente
2

Una vez que tenga una buena tabla MYSQL de algunas palabras malas que desee filtrar (comencé con uno de los enlaces en este hilo), puede hacer algo como esto:

$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 />";

Estoy seguro de que hay una forma más eficiente de hacer todos esos reemplazos, pero no soy lo suficientemente inteligente como para descubrirlo (y esto parece funcionar bien, aunque de manera ineficiente).

Creo que debería equivocarse al permitir que los usuarios se registren, y usar humanos para filtrar y agregar a su tabla de malas palabras, según sea necesario. Aunque todo depende del costo de un falso positivo (palabra correcta marcada como mala) versus un falso negativo (la palabra mala se transmite). En última instancia, eso debería determinar qué tan agresivo o conservador eres en tu estrategia de filtrado.

También sería muy cuidadoso si desea utilizar comodines, ya que a veces pueden comportarse de manera más onerosa de lo que pretende.

Andrés
fuente
1

Francamente, les dejaría pronunciar las palabras "engañar al sistema" y prohibirlas, que soy yo. Pero también simplifica la programación.

Lo que haría es implementar un filtro regex así: /[\s]dooby (doo?)[\s]/io si la palabra tiene el prefijo en otros,/[\s]doob(er|ed|est)[\s]/ . Esto evitaría filtrar palabras como atenuado, lo cual es perfectamente válido, pero también requeriría conocer las otras variantes y actualizar el filtro real si aprende uno nuevo. Obviamente estos son todos ejemplos, pero tendrías que decidir cómo hacerlo tú mismo.

No estoy a punto de escribir todas las palabras que sé, no cuando en realidad no quiero saberlas.

Robert K
fuente
1

Estoy de acuerdo con la inutilidad del tema, pero si tienes que tener un filtro, echa un vistazo a Ning's Boxwood :

Boxwood es una extensión PHP para el reemplazo rápido de varias palabras en un texto. Es compatible con mayúsculas y minúsculas. Requiere que el texto en el que opera se codifique como UTF-8.

También vea esta publicación de blog para más detalles:

Con Boxwood, puede hacer que su lista de términos de búsqueda sea tan larga como lo desee: el algoritmo de búsqueda y reemplazo no se vuelve más lento con más palabras en la lista de palabras para buscar. Funciona construyendo un trie de todos los términos de búsqueda y luego escanea el texto del tema solo una vez, recorriendo elementos del trie y comparándolos con los caracteres de su texto. Es compatible con US-ASCII y UTF-8, coincidencia entre mayúsculas y minúsculas o insensible, y tiene cierta lógica de verificación de límites de palabras centrada en el inglés.

Gordon
fuente
1

Concluí que, para crear un buen filtro de blasfemias, necesitamos 3 componentes principales, o al menos es lo que voy a hacer. Estos son:

  1. El filtro: un servicio en segundo plano que verifica con una lista negra, diccionario o algo así.
  2. No permitir cuenta anónima
  3. Reportar abuso

Una ventaja adicional será recompensar de alguna manera a aquellos que contribuyen con reporteros de abuso precisos y castigar al delincuente, por ejemplo, suspender sus cuentas.

Jaider
fuente
1

También tarde en el juego, pero haciendo algunas investigaciones y tropecé aquí. Como otros han mencionado, es casi casi imposible si estuviera automatizado, pero si su diseño / requisito puede involucrar en algunos casos (pero no todo el tiempo) interacciones humanas para revisar si es profano o no, puede considerar el LD. https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity es mi opción actual en este momento por múltiples razones:

  • Admite muchas localizaciones
  • Siguen actualizando la base de datos, por lo que no tengo que estar al día con los últimos slangs o idiomas (problema de mantenimiento)
  • Cuando hay una alta probabilidad (es decir, 90% o más), puede negarla pragmáticamente
  • Puede observar la categoría que causa una bandera que puede o no ser una blasfemia, y puede hacer que alguien la revise para enseñar que es o no profana.

Para mi necesidad, se basó / está basado en un servicio comercial amigable para el público (OK, videojuegos) que otros usuarios pueden / verán el nombre de usuario, pero el diseño requiere que tenga que pasar por un filtro profano para rechazar el nombre de usuario ofensivo. La parte triste de esto es que el clásico problema "clbuttic" probablemente ocurrirá ya que los nombres de usuario son generalmente una sola palabra (hasta N caracteres) de a veces múltiples palabras concatenadas ... Nuevamente, el servicio cognitivo de Microsoft no marcará "Asistir" como texto. HasProfanity = verdadero pero puede marcar una de las categorías de probabilidad de ser alta.

A medida que el OP pregunta, ¿qué pasa con "un $$"? Aquí hay un resultado cuando lo pasé por el filtro: ingrese la descripción de la imagen aquícomo puede ver, ha determinado que no es profano, pero tiene una alta probabilidad de que lo sea, por lo que señala las recomendaciones. de revisión (interacciones humanas).

Cuando la probabilidad es alta, puedo regresar "Lo siento, ese nombre ya está en uso" (incluso si no lo es) para que sea menos ofensivo para las personas anti-censura o algo así, si no queremos para integrar la revisión humana o devolver "Su nombre de usuario ha sido notificado al departamento de operaciones en vivo, puede esperar a que se revise y apruebe su nombre de usuario o elija otro nombre de usuario". O lo que sea...

Por cierto, el costo / precio de este servicio es bastante bajo para mi propósito (¿con qué frecuencia se cambia el nombre de usuario?), Pero de nuevo, para OP, tal vez el diseño exige consultas más intensas y puede no ser ideal para pagar / suscribirse ML-services, o no puede tener interacciones / revisión humana. Todo depende del diseño ... Pero si el diseño se ajusta a la factura, quizás esta sea la solución de OP.

Si está interesado, puedo enumerar los inconvenientes en el comentario en el futuro.

HidekiAI
fuente
-2

Los filtros de blasfemias son una mala idea.La razón es que no puedes entender todas las malas palabras. Si lo intentas, obtienes falsos positivos.

Atrapando palabras

Digamos que quieres atrapar la palabra F. Fácil, verdad? Bien, veamos.

Puedes recorrer una cadena para encontrar "joder". Desafortunadamente, la gente engaña a los filtros hoy en día. El filtro de malas palabras no captaba "fuk".

Uno puede intentar verificar la ortografía y las variantes múltiples de la palabra, pero eso ralentizará el rendimiento de su código. Para atrapar la palabra F, debe buscar "fuc", "Fuc", "fuk", "Fuk", "F ***", etc. Y la lista sigue y sigue.

Evitar la inocencia

Bien, entonces, ¿qué tal si se distingue entre mayúsculas y minúsculas e ignora los espacios para que atrape "F u C k"? Puede parecer una buena idea, pero alguien puede pasar por alto el filtro de blasfemias con "FUCK"

Ignoras la puntuación.

Ahora que es un problema real, ya que una oración como "¡ Diablos , ahí!" aparecerá como "infierno" y " ¿Qué culo ?" recoge como "culo".

Y hay un montón de palabras que debe excluir del filtro, tales como "Cons tit ution", porque contiene "tit".

Las personas también pueden usar palabras sustitutas, como "Frack". ¿Tú también bloqueas eso? ¿Qué pasa con "pluma es" para "pene"? Su programa no tiene inteligencia artificial para saber si la cadena es buena o mala.

No uses filtros profanos. Son difíciles de desarrollar y son tan lentos como un rastreo.

clickbait
fuente
2
-1 no responde la pregunta OP y es principalmente un comentario de opinión. Hay muchos casos de uso válidos para esta utilidad. Por ejemplo, limpiar el código fuente antes de una auditoría para que la empresa no se avergüence.
davidjmcclelland
-3

No lo hagas

Porque:

  • Clbuttic
  • La blasfemia no es OMG MAL
  • La blasfemia no se puede definir efectivamente
  • La mayoría de las personas probablemente no aprecian estar "protegidas" de las blasfemias.

Editar: Si bien estoy de acuerdo con el comentarista que dijo "la censura está mal", esa no es la naturaleza de esta respuesta.

párpado
fuente
90
10 votos a favor para esta falta de respuesta? ¿Como si alguien que quiere filtrar blasfemias debe ser un medio ingenioso moralizante? Caramba. Esta es una pregunta válida y las respuestas sarcásticas no deben ser recompensadas. -1.
Kluge
12
@Kludge: Eres el único que dijo "medio ingenioso moralizante", de hecho, no dije nada sobre la naturaleza moral de implementar un filtro de blasfemias. Mitch saca a colación parte de la razón por la que dije "no lo hagas", y no es un paso en coche sarcástico. A veces "no" es la respuesta correcta a "¿cómo ...?" [continúa]
párpado
2
@eyelidlessness: Quizás tengas razón en que leí demasiado en tu respuesta de una sola palabra. Pero como no dio más detalles, no podría decir si sus objeciones fueron por razones morales o técnicas. Admito que estoy cansado de los comentarios de "la censura en cualquier forma es mala".
Kluge
55
-1. "No" no es una respuesta válida independientemente de cuestiones morales o técnicas. Hay muchas ocasiones en que es perfectamente apropiado filtrar contenido en función de la naturaleza del contenido. Imagine un sitio de comercio electrónico que vende ropa interior para mujeres y ofrece una función de 'Comentarios'. ¿Realmente quieres niños prepubescentes que ensucian tu sitio con basura? Por supuesto no. Y tal vez sea demasiado engorroso tener un proceso de aprobación humano. Un filtro simple para negar comentarios con basura es algo bueno.
pspahn
3
@pspahn, "no" es la respuesta correcta a cualquier pregunta que solicite una solución al problema incorrecto. Ciertamente, hay casos válidos en los que el contenido debe ser moderado, pero un "filtro de malas palabras" no lo es.
párpado