Как лучше всего проанализировать строку на наличие «плохих» слов в C#?

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

  •  13-09-2020
  •  | 
  •  

Вопрос

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

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

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

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

ОБНОВЛЯТЬЯ не собираюсь автоматически удалять нецензурную лексику...для моего веб-приложения я хочу получать уведомления, если используется слово, которое я считаю «плохим».Затем я проверю его сам, чтобы убедиться, что он законен.Своего рода система автоматической пометки.

Это было полезно?

Решение

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

Измените, чтобы добавить пример кода:

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

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

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

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

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top