2017-09-21 3 views
1

저는 스페인어로 된 문서에서 R로 텍스트 마이닝을하고 있습니다. 인코딩 문제와 그 문제를 해결하기 위해 생각한 여러 가지 문제가 있습니다. 나는 다른 주제를 찾고 있지만 명확한 해결책을 찾을 수는 없습니다. 그리고 상황이 매번 다르게 작동한다는 사실은 아마 내가 그 문제를 정말로 이해하지 못한다는 것을 의미합니다.R : 텍스트 인코딩 문제 R

pdf_text (패키지 pdftools)을 사용하여 PDF에서 텍스트 데이터를 추출했으며, 틸드가있는 문자는 유니 코드로 변환됩니다. "<U+00ED>". 그러나 이것을 gsub (또는 grepl으로 찾음)을 사용하여 일반 문자로 대체하려고하면 R이 아무 것도 찾지 않습니다. 당신이 수동으로 stringrs을 소개하는 경우

> txt 
[1] "Comunidad Aut<U+00F3>noma: Pa<U+00ED>s Vasco"        
[2] "Provincia: <U+00C1>lava"             
[3] "Alda se extingue y su territorio se incorpora a Valle de Arana. Censo 1950" 
> str(txt) 
chr [1:3] "Comunidad Aut<U+00F3>noma: Pa<U+00ED>s Vasco" ... 
> grepl("<U\\+00F3>", txt) 
[1] FALSE FALSE FALSE 
> grepl("<U+00F3>", txt) 
[1] FALSE FALSE FALSE 
> gsub("<U\\+00F3>", "o", txt) 
[1] "Comunidad Aut<U+00F3>noma: Pa<U+00ED>s Vasco"        
[2] "Provincia: <U+00C1>lava"             
[3] "Alda se extingue y su territorio se incorpora a Valle de Arana. Censo 1950" 

그러나, R 그들을 찾을 않고 대체가 가능합니다 :

> txt = c("Comunidad Aut<U+00F3>noma: Pa<U+00ED>s Vasco", "Provincia: <U+00C1>lava") 
> str(txt) 
chr [1:2] "Comunidad Aut<U+00F3>noma: Pa<U+00ED>s Vasco" ... 
> grepl("<U\\+00F3>", txt) 
[1] TRUE FALSE 
> gsub("<U\\+00F3>", "o", txt) 
[1] "Comunidad Autonoma: Pa<U+00ED>s Vasco" 
[2] "Provincia: <U+00C1>lava" 

왜 이런 일이 출력은 다음과 같이 보입니다? 실제로 R을 읽으면 두 점이 다르게 보입니다.

이전에는 정상적인 문자로 대체 할 수있는 adapt 함수를 만들었지 만, 어떤 경우에는 작동하지 않는 것으로 나타났습니다. 왜 그런지 이해하지 못합니다. 또한 이러한 데이터가 OCR에서 왔을 때 혼란은 더욱 커지고 UTF-8 로의 변환은 끊임없이 달라집니다.

누구나이 문제를 해결하는 일반적인 방법을 알고 있습니까? 나는 이것을 앞으로 광범위하게 연구 할 것입니다.

고마워요.

P.S :

> sessionInfo() 
R version 3.4.1 (2017-06-30) 
Platform: x86_64-apple-darwin15.6.0 (64-bit) 
Running under: macOS Sierra 10.12.6 

Matrix products: default 
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib 

locale: 
[1] C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods 
[7] base  

other attached packages: 
[1] pdftools_1.4 stringr_1.2.0 

loaded via a namespace (and not attached): 
[1] compiler_3.4.1 magrittr_1.5 tools_3.4.1 Rcpp_0.12.12 
[5] stringi_1.1.5 
+0

당신이 대신 ""의 \ "의 u00f3"를 사용하면 어떻게됩니까? 또한,'dput (txt)'의 결과를 제공 할 수 있습니까? 여기서'txt'는 추출 된 것입니까? –

+0

실제로 작동합니다 : ''''> grepl ("\ u00f3", txt) [1] TRUE FALSE FALSE'''' 왜 그렇게됩니까? –

+0

dput 출력 : 또한 dput 출력 상 : ''> dput (TXT) C ("욱 AUT 노마 : 파 의 바스", "Provincia : 용암" "알다 SE extingue Y SU 테리토리오 (Territorio se)는 발레 드 아라나 (Valle de Arana)입니다. 센소 1950 " )"''' –

답변

1

여기서 문제는 R 비 ASCII 문자를 인쇄하는 것을 거부합니다 귀하의 로케일이, C로 설정되어 있다는 점이다. 유니 코드를 인쇄 할 수있는 로켈로 변경하면 예상 한 문자가 표시됩니다. 여기

txt <- "Comunidad Aut\u00F3noma: Pa\u00EDs Vasco" 

Sys.setlocale("LC_CTYPE", "C") # switch character type locale to "C" 
## "C" 

print(txt) 
## [1] "Comunidad Aut<U+00F3>noma: Pa<U+00ED>s Vasco" 

Sys.setlocale("LC_CTYPE", "") # switch to native locale 
## [1] "en_US.UTF-8" 

print(txt) 
## [1] "Comunidad Autónoma: País Vasco" 

는 "오 악센트와"문자를 대체하는 방법은 다음과 같습니다

gsub("\u00F3", "o", txt) 
## [1] "Comunidad Autonoma: País Vasco"