Este es un problema muy difícil de resolver y es necesario determinar si las expresiones regulares funcionarán para usted y cómo maneja la incrustación (cuando agrega una palabra de diccionario a profanidad como frackface excepto con la palabra real F-word).
Las expresiones regulares generalmente tienen un límite de cuánto tiempo pueden estar y esto usualmente le impide usar una sola expresión regular para todas sus palabras. Ejecutar múltiples expresiones regulares contra una cadena es muy lento, dependiendo del rendimiento que necesite y del tamaño de su lista negra. Inicialmente implementamos CleanSpeak como un sistema de expresión regular, pero no escala y lo reescribimos usando un mecanismo diferente.
También debe tener en cuenta frases, signos de puntuación, espacios, leet-speak y otros idiomas. Todos estos hacen que las expresiones regulares sean menos atractivas como solución. He aquí algunos ejemplos que utilizan la palabra hola (asuma que se profanidad para este ejercicio):
- elemento de la lista
- hola
- hola
- h_e_l_l_o
- | - | Ello
- h3llo
- "hola allí" (esta frase puede no contener palabras profanas pero combinadas son profanas)
También necesita manejar casos de borde donde dos o más palabras de diccionario (lista blanca) contienen una blasfemia cuando están una al lado de la otra.Algunos ejemplos que contienen la s-palabra:
- fiesta que
- ssh es tiempo de silencio
Estos, obviamente, no son malas palabras, pero la mayoría de las soluciones comerciales de cosecha propia y muchos tienen problemas con estos casos.
Hemos pasado los últimos 3 años perfeccionando el filtro utilizado por CleanSpeak para asegurarnos de que maneja todos estos casos y seguimos modificando y mejorando. También pasamos 8 meses perfeccionando nuestro sistema para el rendimiento y puede manejar aproximadamente 5,000 mensajes por segundo. No quiere decir que no se puede construir algo utilizable, pero estar preparado para manejar una gran cantidad de problemas que podrían surgir y también para crear un sistema que no utiliza expresiones regulares.
Revise este enlace: http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter –
Busque el problema de Scunthorpe: http: //en.wikipedia .org/wiki/Scunthorpe_problem – rossum