2

utf-8 を ASCII 文字に自動的に変換するのに苦労しています。

データフレームには、ギリシャ文字に由来する次のシーケンスがあります。

<U+03A0><U+0391><U+039D><U+0391>G

シーケンスを手動で

\u03A0\u0391\u039D\u0391G

次のコマンドを使用してstringiを使用して、正しい転写を取得しました。

t <- "\u03A0\u0391\u039D\u0391G" # original "ΠΑΝΑΓ"
t <- stri_trans_general(t,"any-latin")
t <- stri_trans_general(t,"latin-ascii")
print(t)
[1] "PANAG"

ここで、 stringrを使用して翻訳を自動化したい:

t2 <- "<U+03A0><U+0391><U+039D><U+0391>G"
t2 <- str_replace_all(t2,">","")
t2 <- str_replace_all(t2,"<U+","\\u") # double \\ for the escape character

結果は次のとおりです。

[1] "+03A0+0391+039D+0391G"

stringiで翻訳できないもの

私のデータフレームにはこれらの文字列シーケンスがたくさんあるので、stringrstringiを介して元のutf-8文字列をASCII文字に変換する方法を質問してください。

RでRStudioバージョン0.99.825を実行しています

R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale: [1] LC_COLLATE=German_Austria.1252

RStudio と R は、ポータブル アプリとして実行されます。

前もって感謝します

敬具

マーカス

4

1 に答える 1

3

t2 <- str_replace_all(t2,"<U+","\u")動作しない理由\uは、 が Unicode 文字を開始し、R が\u. したがって、\\\\u文字列を挿入する を使用する必要があります"\u"(R に対して 1 回、 に対して 1 回、2 回エスケープする必要がありますgsub)。ただし、コンソールに入力された/ファイルから取得されたものとは異なる文字列になります。 以下で使用したトリックは、文字列を解析することです。"\u03A0""\u03A0"

そこには、おそらくこれを行うためのより簡単な方法があるはずですが、次のように機能します。

 library(stringi)

str <- "<U+03A0><U+0391><U+039D><U+0391>G"

t <- gsub("<U\\+", "\\\\u", str)
t <- gsub(">", "", t)
t <- eval(parse(text=paste0('"', t, '"')))

t <- stri_trans_general(t,"any-latin")
stri_trans_general(t,"latin-ascii")
于 2015-12-22T13:19:48.683 に答える