R 语料库弄乱了我的 UTF-8 编码文本

标签 r encoding utf-8 tm corpus

我只是想从俄语、UTF-8 编码的文本创建一个语料库。问题是,来自 tm 的语料库方法包未正确编码字符串。

这是我的问题的可重现示例:

载入俄文:

> data <- c("Renault Logan, 2005","Складское помещение, 345 м²",
          "Су-шеф","3-к квартира, 64 м², 3/5 эт.","Samsung galaxy S4 mini GT-I9190 (чёрный)")

创建一个矢量源:
> vs <- VectorSource(data)
> vs # outputs correctly

然后,创建语料库:
> corp <- Corpus(vs)
> inspect(corp) # output is not encoded properly

我得到的输出是:
> inspect(corp)
<<VCorpus (documents: 5, metadata (corpus/indexed): 0/0)>>

[[1]]
<<PlainTextDocument (metadata: 7)>>
Renault Logan, 2005

[[2]]
<<PlainTextDocument (metadata: 7)>>
Ñêëàäñêîå ïîìåùåíèå, 345 ì<U+00B2>

[[3]]
<<PlainTextDocument (metadata: 7)>>
Ñó-øåô

[[4]]
<<PlainTextDocument (metadata: 7)>>
3-ê êâàðòèðà, 64 ì<U+00B2>, 3/5 ýò.

[[5]]
<<PlainTextDocument (metadata: 7)>>
Samsung galaxy S4 mini GT-I9190 (÷¸ðíûé)

为什么输出不正确? 似乎没有任何选项可以在 Corpus 方法上设置编码。有没有办法在事后设置它?我试过这个:
> title_corpus <- tm_map(title_corpus, enc2utf8)
Error in FUN(X[[1L]], ...) : argumemt is not a character vector

但是,如图所示出错。

最佳答案

好吧,似乎有好消息和坏消息。

好消息是,即使 inspect() 显示不正确,数据看起来也不错。 .试试看

content(corp[[2]])
# [1] "Складское помещение, 345 м²"

它看起来很有趣的原因 inspect()是因为作者改变了方式print.PlainTextDocument功能有效。以前会cat要筛选的值。然而,现在他们通过 writeLines() 提供数据.此函数使用系统的语言环境来格式化文档中的字符/字节。 (这可以通过 Sys.getlocale() 查看)。事实证明,Linux 和 OS X 具有正确的“UTF-8”编码,但 Windows 使用特定于语言的代码页。因此,如果字符不在代码页中,它们会被转义或转换为有趣的字符。这意味着这在 Mac 上应该可以正常工作,但不能在 PC 上工作。

尝试更进一步并构建 DocumentTermMatrix
dtm <- DocumentTermMatrix(corp)
Terms(dtm)

希望您会看到(和我一样)正确显示的单词。

如果您愿意,this article about writing UTF-8 files on Windows有一些关于这个操作系统特定问题的更多信息。我认为没有简单的方法可以让 writeLines 将 UTF-8 输出到 stdout()在 Windows 上。我不知道为什么包维护者改变了打印方法,但人们可能会要求或提交一个功能请求来改变它。

关于R 语料库弄乱了我的 UTF-8 编码文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24920396/

相关文章:

java - Tomcat 8 编码错误

Java 数组排序 UTF-8

r - R 的 Caret 包。保留了哪些 sample ?

R Shiny - 使用文件输入将标记添加到传单 map

python - 模糊匹配具有相同列数的多个数据框的列标题?

encoding - 如何在 GraphQL 服务器上启用 gzip?

android - 从 Android 应用提交的文本编码不正确

powershell - 将文件转换为 UTF-8 : Get-Content : Exception of type 'System.OutOfMemoryException' was thrown

Python CGI - UTF-8 不工作

r - 在因子变量上绘制直方图