Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R语料库弄乱了我的UTF-8编码文本_R_Encoding_Utf 8_Tm_Corpus - Fatal编程技术网

R语料库弄乱了我的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

我只是想从俄语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
>数据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您能提供一个示例代码来实现这一点吗?