Заменить / удалить слова в строке, которые существуют в отдельном списке

Я ищу лучший, более чистый метод, чтобы убрать плохие слова из длинной строки.

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

import scala.io.Source def removeBadWords(comment: String): String = { val bufferedBadWords = Source.fromFile("/Users/me/Desktop/badwords.txt") val badWords = bufferedBadWords.getLines.toList bufferedBadWords.close var newComment = comment for(badWord <- badWords) { newComment = badWord.r.replaceAllIn(newComment, "*" * badWord.length) } newComment } val sentence = "These are just a couple of [bad word] sentences. I want to [bad word] replace certain words with [bad word] asterisks - if [bad word] possible." println(removeBadWords(sentence)) // Result: These are just a couple of **** sentences. I want to ******* replace certain words with ******* asterisks - if ******* possible. 

Есть ли более эффективный и более идиоматический способ сделать это?

Всего 1 ответ


Вы можете сделать все это за один проход, но у вас может не получиться, чтобы замещающая строка соответствовала длине неверной строки.

def removeBadWords(comment :String) :String =
  io.Source
    .fromFile("badwords.txt")       //open file
    .getLines                       //without newline chars
    .mkString("\b(", "|", ")\b")  //regex with word boundaries
    .r                              //compile
    .replaceAllIn(comment, "****")  //return cleaned comment

Есть идеи?

10000