program tip

데이터 파일에서 ASCII가 아닌 문자 제거

radiobox 2020. 11. 4. 07:50
반응형

데이터 파일에서 ASCII가 아닌 문자 제거


나는 잔뜩있어 csv내가 R에 읽고 패키지에 포함하고있어 것을 파일 / 데이터에 폴더 .rdata형식입니다. 불행히도 데이터의 ASCII가 아닌 문자는 검사에 실패합니다. tools패키지는 ASCII 문자가 아닌 문자 (확인하기 위해 두 가지 기능이 showNonASCIIshowNonASCIIfile)하지만 난 그들을 청소 / 제거를 찾을 수없는 것.

다른 UNIX 도구를 탐색하기 전에이 모든 작업을 R에서 수행하여 원시 데이터에서 최종 제품까지 완전한 워크 플로를 유지하는 것이 좋습니다. 비 ASCII 문자를 제거하는 데 도움이되는 기존 패키지 / 기능이 있습니까?


비 ASCII 문자 를 간단히 제거 하려면 base R iconv(), setting을 사용할 수 있습니다 sub = "". 다음과 같이 작동합니다.

x <- c("Ekstr\xf8m", "J\xf6reskog", "bi\xdfchen Z\xfcrcher") # e.g. from ?iconv
Encoding(x) <- "latin1"  # (just to make sure)
x
# [1] "Ekstrøm"         "Jöreskog"        "bißchen Zürcher"

iconv(x, "latin1", "ASCII", sub="")
# [1] "Ekstrm"        "Jreskog"       "bichen Zrcher"

하려면 찾아 당신은 아마 다음과 같은 아이디어를 적용 할 수, ASCII 문자가 아닌 문자, 또는 파일에 전혀 어떤이 있다면 찾을 수 :

## Do *any* lines contain non-ASCII characters? 
any(grepl("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII")))
[1] TRUE

## Find which lines (e.g. read in by readLines()) contain non-ASCII characters
grep("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII"))
[1] 1 2 3

요즘에는 일반적인 유니 코드 변환 기능을 제공하는 stringi 패키지를 사용하는 것이 약간 더 나은 접근 방식입니다. 이렇게하면 원본 텍스트를 최대한 보존 할 수 있습니다.

x <- c("Ekstr\u00f8m", "J\u00f6reskog", "bi\u00dfchen Z\u00fcrcher")
x
#> [1] "Ekstrøm"         "Jöreskog"        "bißchen Zürcher"

stringi::stri_trans_general(x, "latin-ascii")
#> [1] "Ekstrom"          "Joreskog"         "bisschen Zurcher"

비 ASCII 문자가 포함 된 모든 단어 (@Hadley에서 차입 코드)를 제거하려면 패키지를 사용할 수 있습니다 xfunfilter에서를dplyr

x <- c("Ekstr\u00f8m", "J\u00f6reskog", "bi\u00dfchen Z\u00fcrcher", "alex")
x

x %>% 
  tibble(name = .) %>%
  filter(xfun::is_ascii(name)== T)

참고 URL : https://stackoverflow.com/questions/9934856/removing-non-ascii-characters-from-data-files

반응형