Похоже, не так много места для множества улучшений. Я могу порекомендовать сжать первую часть, где вы удаляете ссылки или упоминания, а также удаление не-букв в одном регулярном выражении, но вам нужно заранее удалить дефисы:
val cleanse2 = (str: String) => normalize(str) // Normalize
.replace("-","") // Remove -
.replaceAll("""(?<!\S)(?:[@/]|http|www)\S*|\P{L}""", " ") // Remove entities
.replaceAll("""\s{2,}""", " ") // Shrink whitespaces
.trim // Trim the result
.toLowerCase // To lower case
См. Демонстрационную версию регулярных выражений .
Шаблон (?<!\S)(?:[@/]|http|www)\S*|\P{L}
соответствует
(?<!\S)
- пробел или начало строки должны предшествовать текущей позиции немедленно (?:[@/]|http|www)\S*
- @
, /
, http
или www
, а затем любые 0+ непробельных символов |
- или \P{L}
- любые буква char.