Что лучший способ состоит в том, чтобы проанализировать строку для “плохих” слов в C#?

Я думаю о чем-то как:

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

но я уверен, что существует лучший путь.

Заранее спасибо!

ОБНОВЛЕНИЕ я не надеюсь удалять ругательства автоматически... для моего веб-приложения, я хочу быть уведомленным, если слово, которое я считаю "плохо", используется. Затем я рассмотрю его сам, чтобы удостовериться, что это законно. Автоматическая отмечающая своего рода система.

7
задан Keng 22 October 2010 в 15:38
поделиться

3 ответа

Хотя ваш способ работает, это может занять немного времени. Здесь есть замечательный ответ на предыдущий вопрос SO. Хотя вопрос касается PHP, а не C #, я думаю, что его можно легко перенести.

Отредактируйте, чтобы добавить образец кода:

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

Это должно сработать для вас более или менее.

Отредактируйте, чтобы ответить на пояснение OP:

Я не хочу автоматически удалять непристойности ... для моего веб-приложения я хочу получать уведомления, если используется слово, которое я считаю "плохим".

Как и в случае с заменой выше, вы можете увидеть, соответствует ли что-то так:

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

Он вернет true , если строка, которую вы ему передали, содержит какие-либо слова в списке.

16
ответ дан 6 December 2019 в 08:41
поделиться

Вы можете использовать объекты HashKey или Dictionary > вместо массива как использование словаря, например, может сделать код более эффективным, потому что метод .Contains () становится .Keys.Contains (), что намного эффективнее. Это особенно верно, если у вас большой список ненормативной лексики (не уверен, сколько их! :)

1
ответ дан 6 December 2019 в 08:41
поделиться

На моей работе мы ввели автоматическую фильтрацию плохих слов в наше программное обеспечение (это немного шокирует, когда просматриваешь источник и вдруг натыкаешься на массив, содержащий несколько страниц непристойностей).

Один из советов - предварительно обрабатывать пользовательский ввод перед проверкой на соответствие вашему списку, на тот случай, если кто-то пытается что-то проскочить мимо вас. Итак, для предварительной обработки мы

  • переводим все в верхний регистр
  • удаляем большинство неалфавитно-цифровых символов (то есть, просто вырезаем пробелы, знаки препинания и т.д.)
  • и затем, если кто-то пытается выдать цифры за буквы, делаем примерно следующее: заменяем ноль на O, 9 на G, 5 на S, и т.д. (подойдите творчески)

А потом позовите друзей, чтобы они попытались его сломать. Это весело.

4
ответ дан 6 December 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: