我正在使用以下 R 代码将文本转换为小写:
movie_Clean <- tm_map(movie_Clean, content_transformer(tolower))
但是我最终得到以下错误:
FUN(内容(x),...)中的错误:'utf8towcs'中的输入无效'我只想看侏罗纪世界í ½í¸«'。
请帮助如何克服这个错误。
我正在使用以下 R 代码将文本转换为小写:
movie_Clean <- tm_map(movie_Clean, content_transformer(tolower))
但是我最终得到以下错误:
FUN(内容(x),...)中的错误:'utf8towcs'中的输入无效'我只想看侏罗纪世界í ½í¸«'。
请帮助如何克服这个错误。
这似乎是一个编码错误。尝试添加行
Encoding(movie_Clean) <- "UTF-8"
在小写数据之前。查看此答案以了解一些情况:https ://stackoverflow.com/a/28340080/4539807
在 stackoverflow 上有许多建议的解决方案可能有效,但在最新版本的 wordcloud 和 tm 中不再有效。根本原因是文本数据包含以混乱的代理编码的表情符号字符。有关更详细的说明,请阅读包含解决方案的这篇博文。
在这种情况下有效的转换是
words <- iconv(words, "ASCII", "UTF-8", sub="byte")
以下是失败的原因:
我尝试在创建语料库之前和之后转换文本
words.corpus <- Corpus(VectorSource(words))
前:
在文本上转换为 UTF-8 不起作用:
words <- sapply(words, function(x) iconv(enc2utf8(x), sub = "byte"))
也不
for (i in 1:length(words))
{
Encoding(words[[i]])="UTF-8"
}
后:
Converting to UTF-8 on the corpus didn't work with:
words.corpus <- tm_map(words.corpus, removeWords, remove_words)
也不
words.corpus <- tm_map(words.corpus, content_transformer(stringi::stri_trans_tolower))
也不
words.corpus <- tm_map(words.corpus, function(x) iconv(x, to='UTF-8'))
也不
words.corpus <- tm_map(words.corpus, enc2utf8)
也不
words.corpus <- tm_map(words.corpus, tolower)
所有这些解决方案可能在某个时间点都有效,所以我不想诋毁作者。他们将来可能会工作一段时间。但是他们为什么不工作几乎不可能说,因为他们应该工作有充分的理由。无论如何,只要记住在创建语料库之前转换文本:
words <- iconv(words, "ASCII", "UTF-8", sub="byte")