我正在努力将对话文本转换为R可读取的格式。但是,我遇到了一些特殊字符,例如卷曲引号、短横线等。通常情况下,我会在微软产品中使用
结果是:
这将给出:
为了让我的期望结果更加清晰,我将从像维基百科这样的页面中抓取表格:http://en.wikipedia.org/wiki/Quotation_mark_glyphs 并使用Unicode参考图表适当地替换字符。因此,我需要将字符转换为Unicode或某种标准格式,以便我可以系统地遍历并替换字符。也许它已经是Unicode格式了,而我却没有注意到。
PS:我不将文件保存为.csv或纯文本,因为特殊字符会被替换为
replace
来替换这些特殊字符。通常情况下,我会用普通文本替换特殊字符,但有时也希望用其他字符替换它们(例如,我会用 { } 替换 “ ”)。这很繁琐,而且不总是彻底的。如果我可以按原样将文本读入R,然后使用编码将其转换为可识别的Unicode格式,我就可以使用gsub
将其替换为普通文本版本。但是,文件以我不理解的某种方式被读入了。以下是我的数据可能看起来像的xlsx文件:
http://dl.dropbox.com/u/61803503/test.xlsx
这是 .xlsx 文件中的内容
text num
“ ” curly quotes 1
en dash (–) and the em dash (—) 2
‘ ’ curly apostrophe-ugg 3
… ellipsis are uck in R 4
这可以用以下方式读入R:
URL <- "http://dl.dropbox.com/u/61803503/test.xlsx"
library(gdata)
z <- read.xls(URL, stringsAsFactors = FALSE)
结果是:
text num
1 “ †curly quotes 1
2 en dash (–) and the em dash (—) 2
3 ‘ ’ curly apostrophe-ugg 3
4 … ellipsis are uck in R 4
于是我尝试使用 Encoding
进行转换为 Unicode:
iconv(z[, 1], "latin1", "UTF-8")
这将给出:
[1] "â\u0080\u009c â\u0080\u009d curly quotes" "en dash (â\u0080\u0093) and the em dash (â\u0080\u0094)"
[3] "â\u0080\u0098 â\u0080\u0099 curly apostrophe-ugg" "â\u0080¦ ellipsis are uck in R"
这使得使用gsub的效果不佳。
我该怎么做才能将这些特殊字符转换为可区分的Unicode,以便我可以适当地进行gsub处理?更明确地说,我希望z [1,1]
的读数为:
\u201C 2\u01D curly quotes
为了让我的期望结果更加清晰,我将从像维基百科这样的页面中抓取表格:http://en.wikipedia.org/wiki/Quotation_mark_glyphs 并使用Unicode参考图表适当地替换字符。因此,我需要将字符转换为Unicode或某种标准格式,以便我可以系统地遍历并替换字符。也许它已经是Unicode格式了,而我却没有注意到。
PS:我不将文件保存为.csv或纯文本,因为特殊字符会被替换为
?
,因此使用read.xls
。如果您有更好的读取文件方法(例如read.xls
),我并不固执。