如何使用 tm 包将文本转换为小写?

数据挖掘 机器学习 r 文本挖掘
2022-02-21 10:40:59

我正在使用以下 R 代码将文本转换为小写:

movie_Clean <- tm_map(movie_Clean, content_transformer(tolower))

但是我最终得到以下错误:

FUN(内容(x),...)中的错误:'utf8towcs'中的输入无效'我只想看侏罗纪世界í ½í¸«'。

请帮助如何克服这个错误。

2个回答

这似乎是一个编码错误。尝试添加行

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")