Windows中的R无法处理某些字符

时间:2016-01-13 03:17:56

标签: r windows lda topicmodels quanteda

我在Linux中执行了LDA,并且没有在主题2中获得类似“ø”的字符。但是,在Windows中运行时,它们会显示。有谁知道如何处理这个?我使用了包quantedatopicmodels

> terms(LDAModel1,5)
Topic 1  Topic 2
[1,] "car"    "ø"
[2,] "build"  "ù"
[3,] "work"   "network"
[4,] "drive"  "ces"
[5,] "musk"   "new"

编辑:

数据:https://www.dropbox.com/s/tdr9yok7tp0pylz/technology201501.csv

代码是这样的:

library(quanteda)
library(topicmodels)

myCorpus <- corpus(textfile("technology201501.csv", textField = "title"))
myDfm <- dfm(myCorpus,ignoredFeatures=stopwords("english"), stem = TRUE,   removeNumbers = TRUE, removePunct = TRUE, removeSeparators = TRUE)
myDfm <-removeFeatures(myDfm, c("reddit", "redditors","redditor","nsfw", "hey", "vs", "versus", "ur", "they'r", "u'll", "u.","u","r","can","anyone","will","amp","http","just"))
sparsityThreshold <- round(ndoc(myDfm) * (1 - 0.9999))
myDfm2 <- trim(myDfm, minDoc = sparsityThreshold)
LDAModel1 <- LDA(quantedaformat2dtm(myDfm2), 25, 'Gibbs', list(iter=4000,seed = 123))

1 个答案:

答案 0 :(得分:0)

这是一个编码问题,加上使用Windows和Linux的R中可用的不同语言环境。 (尝试:Sys.getlocale())Windows默认使用.1252(又名“cp1252”,“WINDOWS-1252”),而Linux和OS X使用UTF-8。我的猜测是technology201501.csv编码为UTF-8,当你把它读入R Windows时会转换为1252,这些字符对单词做了一些奇怪的事情,并创建了明显的标记作为字符(但没有可重复的例子,我不可能告诉)。相比之下,在Linux中,由于没有转换,因此保留了包含“ø”等字样的单词。转换可能会破坏带有扩展(在7位“ASCII”范围之外)字符的单词,因为这些UTF编码的Unicode代码点没有映射到8位WINDOWS-1252编码中的某个位置,即使这些点存在于该编码中。

要转换,如果您将通话改为:

,它应该有效
myCorpus <- corpus(textfile("technology201501.csv", textField = "title", fileEncoding = "UTF-8"))

因为read.csv()将最后一个参数直接传递给textfile()。 (这仅适用于最新版本,但是,0.9.2。)

您可以在命令行使用file technology201501.csv验证.csv文件的编码。这几乎包含在所有Linux发行版和OS X中,但也在Windows上安装了RTools。