Как удалить японские символы? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть некоторые данные с японскими символами из данных опроса. Некоторые из вопросов и ответов опроса (множественный выбор) даны как на английском, так и на японском, например, Very rarely かなりまれ". В этом случае полезно удалить дубликат японского языка. Как это сделать? 1004 *? Я хочу удалить только японский, а не другие специальные символы.

1 Ответ

1 голос
/ 12 февраля 2020

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