Заменить / удалить слова в строке, которые существуют в отдельном списке - PullRequest
2 голосов
/ 17 мая 2019

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

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

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 Ответ

3 голосов
/ 17 мая 2019

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...