2017-09-21 10 views
1

スペイン語のドキュメントでRのテキストマイニングを行っています。私は、エンコーディングとそれらを解決するために思いついたさまざまな解決策に絶え間ない問​​題が発生しています。私はさまざまなトピックを探していますが、本当に明確な解決策を見つけることはできません。そして、事が毎回違うという事実は、おそらく私が実際に問題を理解していないことを意味します。R:テキストのエンコーディングの問題R

pdf_text(パッケージpdftools)を使用してPDFからテキストデータを抽出し、チルダ付きの文字をUnicodeに変換しました。 "<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のouputを: ''> dput(TXT) C( "コムニダードAUT 野間:Paの Sバスコ"、 "Provincia:溶岩" 「アルダSE extingue Y SU territorio se incorpora a Valle de Arana。Censo 1950 " )' '' ' –

答えて

1

ここでの問題は、あなたのロケールがCに設定されていることであるので、Rは、非ASCII文字を印刷することを拒否します。ロケールをUnicodeの印刷を許可するロケールに変更すると、予想される文字が表示されます。ここで

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"