2010-07-09 6 views
7

Estoy pensando en algo como:¿Cuál es la mejor manera de analizar una cadena de palabras "malas" en C#?

foreach (var word in paragraph.split(' ')) { 
    if (badWordArray.Contains(word) { 
    // do something about it 
    } 
} 

pero estoy seguro de que hay una manera mejor.

¡Gracias de antemano!

ACTUALIZACIÓN No estoy buscando para eliminar automáticamente obscenidades ... para mi aplicación web, que desea ser notificado si se utiliza una palabra de lo que considero "malo". Luego lo revisaré yo mismo para asegurarme de que sea legítimo. Un sistema de señalización automático.

+0

Seguí adelante y edité mi solución en respuesta a su actualización. Déjame saber si eso responde tu pregunta. – rakuo15

+0

posible duplicado de [¿Cómo implementar un buen filtro profanity?] (Http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter) –

Respuesta

15

Mientras su camino funciona, puede tomar un poco de tiempo. Hay un wonderful response here para una pregunta SO anterior. Aunque la pregunta habla de PHP en lugar de C#, creo que se puede portar fácilmente.

Editar para añadir código de ejemplo:

public string FilterWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.Replace(inputWords, "<3"); 
} 

que debería funcionar para usted, más o menos.

Editar para responder OP aclaración:

No estoy buscando para eliminar automáticamente obscenidades ... para mi aplicación web, quiero ser notificado si una palabra que considero "malo" se usa .

Por mucho que la parte superior de reemplazo, se puede ver si hay algo que coincide este modo:

public bool HasBadWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.IsMatch(inputWords); 
} 

Se volverá true si la cadena que se le pasa contiene ninguna palabra en la lista.

+1

Por lo general, "menos". –

+11

Si vas a hacer esto, ** no olvides el '\ b' **. Es un error clbuttic. –

+1

+1 para el culo y el límite –

1

Se podría considerar el uso de los objetos o HashKeyDictionary<T1, T2> en lugar de la matriz como el uso de un diccionario, por ejemplo, puede hacer que el código sea más eficiente, ya que el método .Contains() se convierte en .Keys.Contains(), que es la manera más eficiente. Esto es especialmente cierto si tiene una larga lista de profanidades (no estoy seguro de cuántos hay! :)

4

En mi trabajo, colocamos un filtro automático de palabras incorrectas en nuestro software (es sorprendente ver la fuente y de repente se ejecuta a través de la matriz que contiene varias páginas de obscenidad).

Un consejo es preprocesar la entrada del usuario antes de realizar la prueba en su lista, en ese caso que alguien está tratando de colar algo por usted. Así que a través de pre-procesamiento, que

  • mayúsculas todo en la entrada
  • eliminar la mayoría de los no alfanuméricos (es decir, justo empalmar a cabo ningún espacio, o puntuacion, etc.)
  • y luego suponiendo que alguien está tratando de pasar los dígitos de las letras, haga algo como esto: reemplace cero con O, 9 con G, 5 con S, etc. (sea creativo)

Y luego haga que algunos amigos intenten romperla. Es divertido.

+0

Me gusta esto ... simple y eficaz para mis propósitos. Gracias. – Chaddeus

+1

No solo eso, pedirle a tus amigos que lo rompan es una buena garantía de calidad y una buena noche :) – Flater

Cuestiones relacionadas