Windows中的R无法处理某些字符
我在Linux中执行了LDA,并且在主题2中没有得到像“ø”这样的字符。但是,它们在Windows中运行时显示。有谁知道如何处理这个?我使用包quanteda
和topicmodels
。Windows中的R无法处理某些字符
> 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))
这是一个编码的问题,再加上不同的语言环境可用R中使用Windows和Linux操作系统。 (尝试:Sys.getlocale()
)Windows默认使用.1252(即“cp1252”,“WINDOWS-1252”),而Linux和OS X使用UTF-8。我的猜测是,technology201501.csv
被编码为UTF-8,当你将它读入R Windows时,它们被转换为1252,这些字符对单词做了一些奇怪的事情,并且创建了明显的令牌作为字符(但没有可重复的例子,它是不可能告诉我)。相比之下,在Linux中,包含“ø”等的单词被保留,因为没有转换。由于没有将这些UTF编码的Unicode代码点映射到8位WINDOWS-1252编码中的某个位置,所以转换可能会扩展字符(在7位“ASCII”范围之外),即使这样的点存在于该编码中。
要转换,它,如果你改变你的调用应该工作:
myCorpus <- corpus(textfile("technology201501.csv", textField = "title", fileEncoding = "UTF-8"))
作为最后一个参数是由textfile()
直接传递给read.csv()
。 (但是,在最新版本中只有0.9.2)
您可以在命令行中使用file technology201501.csv
来验证.csv文件的编码。几乎所有的Linux发行版和OS X都包含这些功能,但是也可以在Windows上安装RTools。
我收到了此警告消息。结果仍然是一样的。警告消息: 在文本文件(“technology201501.csv”,textField =“title”,fileEncoding =“UTF-8”)中: 参数fileEncoding未使用 – user1569341
'packageVersion(“quanteda”)'返回什么? –
它返回'0.9.2.0' – user1569341
我猜不同的区域设置。 – 2016-01-13 03:19:37
您没有真正提供足够的数据来使问题重现。我猜想问题在于文件编码。 Windows假定文件采用“拉丁-1”编码。您的Linux操作系统可能会采用UTF-8编码。了解在数据文件中使用的编码以及使用正确的编码正确读取数据非常重要。您不会显示任何导入步骤,因此很难知道您可能做了什么。 – MrFlick
我尝试了像https://support.rstudio.com/hc/en-us/articles/200532197-Character-Encoding这样的不同编码,但它不起作用。 – user1569341