Самый простой подход - сохранить только символы ASCII. Это можно сделать, заменив не-ASCII пустыми строками (например, str_replace_all("æøå かな", "[^0-F]", "")
), и удалив все полученные пробелы. Однако, если кто-то хочет сохранить специальные символы в целом, этот подход не работает. В этом случае можно удалить только японские (включая китайские кандзи) символы. Это может быть сделано путем сопоставления диапазонов блоков Юникода. Я нашел соответствующие японские блоки здесь http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml, но в Википедии также перечислены их, например, https://en.wikipedia.org/wiki/Katakana_ (Unicode_block) .
Вот готовая функция ( требуется tidyverse и assertthat ):
str_rm_jap = function(x) {
#we replace japanese blocks with nothing, and clean any double whitespace from this
#reference at http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml
x %>%
#japanese style punctuation
str_replace_all("[\u3000-\u303F]", "") %>%
#katakana
str_replace_all("[\u30A0-\u30FF]", "") %>%
#hiragana
str_replace_all("[\u3040-\u309F]", "") %>%
#kanji
str_replace_all("[\u4E00-\u9FAF]", "") %>%
#remove excess whitespace
str_replace_all(" +", " ") %>%
str_trim()
}
#tests
assert_that(
#positive tests
"Very rarely かなりまれ" %>% str_rm_jap() %>% equals("Very rarely"),
"Comments ノートとコメント" %>% str_rm_jap() %>% equals("Comments"),
#negative tests
"Danish ok! ÆØÅ" %>% str_rm_jap() %>% equals("Danish ok! ÆØÅ")
)