R语料库弄乱了我的UTF-8编码文本
我只是想从俄语UTF-8编码的文本中创建一个语料库。问题是,R语料库弄乱了我的UTF-8编码文本,r,encoding,utf-8,tm,corpus,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
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
>数据vs#输出正确
然后,创建语料库:
> 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
>corp inspect(corp)#输出未正确编码
我得到的结果是:
> 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 (÷¸ðíûé)
检查(公司)
[[1]]
雷诺洛根,2005
[[2]]
Ñêëàäñêîå ïîìåùåíèå, 345 ì
[[3]]
Ñó-øåô
[[4]]
3-ê êâàðòèðà, 64 ì, 3/5 ýò.
[[5]]
三星galaxy S4迷你GT-I9190
为什么输出不正确?似乎没有任何选项来设置语料库方法的编码。有没有一种方法可以在事后确定呢?我试过这个:
> title_corpus <- tm_map(title_corpus, enc2utf8)
Error in FUN(X[[1L]], ...) : argumemt is not a character vector
>title\u corpus好吧,似乎有好消息和坏消息
好消息是,即使使用inspect()。试试看
content(corp[[2]])
# [1] "Складское помещение, 345 м²"
在inspect()
中它看起来很有趣的原因是作者更改了print.PlainTextDocument
函数的工作方式。它以前将cat
值显示在屏幕上。然而,现在,它们通过writeLines()
提供数据。此函数使用系统的区域设置来格式化文档中的字符/字节。(这可以通过Sys.getlocale()
查看)。事实证明Linux和OSX有一个正确的“UTF-8”编码,但Windows使用特定于语言的代码页。因此,如果字符不在代码页中,它们将被转义或转换为有趣的字符。这意味着这在Mac电脑上应该可以正常工作,但在PC机上则不行
尝试进一步构建DocumentTerm矩阵
dtm <- DocumentTermMatrix(corp)
Terms(dtm)
dtm我很惊讶答案还没有公布。不要费心弄乱现场环境。我使用的是tm软件包版本0.6.0,如果您添加以下小魔术,它的工作绝对正常:
Encoding(data) <- "UTF-8"
编码(数据)导入文本时,我遇到了德语UTF-8编码问题。对我来说,下一个oneliner有助于:
系统设置语言环境(“LC_ALL”、“de_de.UTF-8”)
试着用俄语来表达同样的意思
系统设置语言环境(“LC_ALL”、“ru_ru.UTF-8”)
当然,这是在library(tm)之后和创建语料库之前进行的。我无法复制。当我运行inspect
时,它看起来与数据中的情况相同。您使用的是哪个版本的tm
和R(sessionInfo()
应该告诉您两者)。@MrFlick我使用的是R版本3.1.0(2014-04-10)平台:x86_64-w64-mingw32/x64(64位)
和tm\u 0.6
。我在Windows上。好的。我正在使用3.0.2的计算机,因此无法获取最新版本的tm
。但是语料库没有编码参数,但是矢量源应该有。矢量源(数据,encoding=“UTF-8”)
会发生什么情况。有什么不同吗?它说,VectorSource(原始测试$title,encoding=“UTF-8”):未使用的参数(encoding=“UTF-8”)
Ugh。由于某种原因,它似乎已从最新版本的tm
中删除。最后一个镜头,VectorSource(enc2utf8(数据))
。如果不起作用,也许我可以在我的另一台计算机上试用。也许应该通知维护人员+1您是对的,如果我创建一个DTM,它看起来很好。谢谢你的指导。我有一个微笑的问题,我使用docs@Michael我不确定那里会发生什么。也许包裹又变了。如果您能用最少的时间创建自己的问题,以进一步帮助您,那就更好了。@MrFlick谢谢您的建议。我继续创建了一个新线程。这是一个链接,如果你能帮上忙的话。非常感谢。Encoding()在Corpus类上不起作用;它只对字符向量有效。您确定您的解决方案适用于OP要求的语料库吗?它可以在将文本转换为语料库之前使用,而且效果很好。@KenjiKina您能提供一个示例代码来实现这一点吗?