Qual é a melhor maneira para analisar uma cadeia de caracteres para "bad" palavras em C#?

StackOverflow https://stackoverflow.com/questions/3209580

  •  13-09-2020
  •  | 
  •  

Pergunta

Eu estou pensando em algo como:

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

mas eu tenho certeza que há uma maneira melhor.

Obrigado antecipadamente!

ATUALIZAÇÃO Eu não estou olhando para remover obscenidades automaticamente...para minha web app, eu quero ser notificado se uma palavra que eu considere "bad" é usada.Então eu vou rever-me para certificar-se de que é legítimo.Um auto sistema de sinalização do tipo.

Foi útil?

Solução

Enquanto a sua forma de funcionar, ele pode ser um pouco demorado.Há um maravilhoso resposta aqui para um anterior, ENTÃO, pergunta.Embora a questão fala sobre PHP em vez de C#, eu acho que pode ser facilmente transportada.

Editar para adicionar o código de exemplo:

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

Que deve trabalhar para você, mais ou menos.

Editar a resposta OP esclarecimento:

Eu não estou olhando para remover obscenidades automaticamente...para minha web app, eu quero ser notificado se uma palavra que eu considere "bad" é usada.

Muito como a substituição de parte acima, você pode ver se corresponde a algo como isso:

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

Ele vai voltar true se a seqüência de caracteres que você passou para ele contém todas as palavras na lista.

Outras dicas

No meu trabalho colocamos algumas automática de palavras de baixo calão filtrar em nosso software (é meio chocante para ser a navegação na fonte e de repente executar toda a matriz que contém várias páginas de obscenidade).

Uma dica é para pré-processar a entrada do usuário antes de fazer o teste contra sua lista, no caso de que alguém está tentando esgueirar-se algo por você.Assim, por meio de pré-processamento, nós

  • maiúsculas tudo na entrada
  • remover a maioria dos não-indicadores alfanuméricos (que é, apenas splice quaisquer espaços ou pontuação, etc.)
  • e, em seguida, supondo-se que alguém está tentando se passar por dígitos de letras, de fazer algo como isto:substituir zero com O 9 G, 5 S, etc.(seja criativo)

E, em seguida, convidar alguns amigos para tentar quebrá-lo.É divertido.

Você pode considerar usar o HashKey objetos ou Dictionary<T1, T2> em vez da matriz como a utilização de um Dicionário, por exemplo, pode tornar o código mais eficiente, porque os .Método contains() se torna .Chaves.Contains (), que é a maneira mais eficiente.Isto é especialmente verdadeiro se você tiver uma lista grande de palavrões (não tenho certeza de quantos são!:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top