使用 tm_map(..., tolower) 将文本转换为小写时出错

Posted

技术标签:

【中文标题】使用 tm_map(..., tolower) 将文本转换为小写时出错【英文标题】:Error converting text to lowercase with tm_map(..., tolower) 【发布时间】:2012-11-18 09:02:47 【问题描述】:

我尝试使用tm_map。它给出了以下错误。我该如何解决这个问题?

 require(tm)
 byword<-tm_map(byword, tolower)

Error in UseMethod("tm_map", x) : 
  no applicable method for 'tm_map' applied to an object of class "character"

【问题讨论】:

tm_map 来自哪个包?这似乎依赖于一些非基础包。请考虑包含library 声明以确保完整性。 @DanielKrizian : tm_map() 来自tm 包,tolower() 来自base 【参考方案1】:

使用基础R函数tolower()

tolower(c("THE quick BROWN fox"))
# [1] "the quick brown fox"

【讨论】:

谢谢。但是关于为什么我得到这个错误的任何见解?我可能需要使用其他 tm_map 应用程序! tm_map 的帮助文件(在包tm 中)显示了可用转换函数的列表,tolower 不是其中之一。这些转换似乎是对“语料库”类的对象进行操作的 S3 方法。所以你不能对tm_map 使用任何函数。【参考方案2】:
myCorpus <- Corpus(VectorSource(byword))
myCorpus <- tm_map(myCorpus , tolower)

print(myCorpus[[1]])

【讨论】:

您应该将tolower 包裹在content_transformer 内,以免搞砸VCorpus 对象,例如:tm_map(myCorpus, content_transformer(tolower)) @daroczig:请回答! @smci 感谢您的想法,我刚刚提交了上述评论作为下面的新答案:)【参考方案3】:

以这种方式使用 tolower 有一个不良的副作用:如果您稍后尝试从语料库中创建术语文档矩阵,它将失败。这是因为最近 tm 的更改无法处理 tolower 的返回类型。相反,使用:

myCorpus <- tm_map(myCorpus, PlainTextDocument)

【讨论】:

【参考方案4】:

在这里将我的comment 扩展为更详细的答案:您必须将tolower 包裹在content_transformer 内,以免搞砸VCorpus 对象——类似于:

> library(tm)
> data('crude')
> crude[[1]]$content
[1] "Diamond Shamrock Corp said that\neffective today it had cut its contract prices for crude oil by\n1.50 dlrs a barrel.\n    The reduction brings its posted price for West Texas\nIntermediate to 16.00 dlrs a barrel, the copany said.\n    \"The price reduction today was made in the light of falling\noil product prices and a weak crude oil market,\" a company\nspokeswoman said.\n    Diamond is the latest in a line of U.S. oil companies that\nhave cut its contract, or posted, prices over the last two days\nciting weak oil markets.\n Reuter"
> tm_map(crude, content_transformer(tolower))[[1]]$content
[1] "diamond shamrock corp said that\neffective today it had cut its contract prices for crude oil by\n1.50 dlrs a barrel.\n    the reduction brings its posted price for west texas\nintermediate to 16.00 dlrs a barrel, the copany said.\n    \"the price reduction today was made in the light of falling\noil product prices and a weak crude oil market,\" a company\nspokeswoman said.\n    diamond is the latest in a line of u.s. oil companies that\nhave cut its contract, or posted, prices over the last two days\nciting weak oil markets.\n reuter"

【讨论】:

以上是关于使用 tm_map(..., tolower) 将文本转换为小写时出错的主要内容,如果未能解决你的问题,请参考以下文章

无法让 tm_map 使用 mc.cores 参数

使用 rJava 导入的静态 Java 函数不适用于 tm_map()

使用 tm_map 的自定义函数维护用户定义的元数据

R tm 包在“utf8towcs”中输入无效

c++ 在使用 tolower 时使用 c 字符串格式化错误

tolower字符串转换函数应用实例