tm_map是R中的错误

时间:2017-05-25 12:38:47

标签: r tm

这是我第一次进行推特分析。

    #Search data from Twitter
library("twitteR")
SearchData = searchTwitter("Bruno Mars", n=1000,lang = 'en')
SearchData

#Scrapping Data 
userTimeline("BrunoMars", n=100, maxID =NULL, excludeReplies = FALSE, includeRts = FALSE)

class(SearchData)
head(SearchData)

#Cleanning Data
library(NLP)
library(tm)



TweetList <- sapply(SearchData, function(x) x$getText()) 

TweetList <- (TweetList[!is.na(TweetList)])
TweetCorpus <- Corpus(VectorSource(TweetList))
TweetCorpus <-  iconv(TweetCorpus, to ="utf-8")

#change data to lower case

TweetCorpus <- tm_map(TweetCorpus,removePunctuation)
TweetCorpus <- tm_map(TweetCorpus, removeNumbers)
TweetCorpus <- tm_map(TweetCorpus, tolower)

我收到此错误“UseMethod中的错误(”tm_map“,x):   没有适用于'tm_map'的方法适用于我最后3行的“class”类对象。

我试图通过在removePunctuation之前添加content_transformer,removeNumbers和tolower到我的代码来解决问题,但我仍然有同样的错误。我真的不知道。我需要你的建议和意见。我已经解决了这个问题几天,但还没有解决。

非常感谢 罗斯

2 个答案:

答案 0 :(得分:1)

最新版本的tm使您无法使用tm_map的函数来处理简单的字符值。所以问题是你的tolower步骤,因为那不是&#34;规范&#34;转型(见getTransformations())。只需用

替换它
TweetCorpus <- tm_map(TweetCorpus, content_transformer(tolower))

content_transformer函数包装器会将所有内容转换为语料库中正确的数据类型。您可以将content_transformer与任何旨在操纵字符向量的函数一起使用,以便它可以在tm_map管道中工作。

答案 1 :(得分:0)

tm_map必须应用于Corpus对象,而不是字符向量。但iconv会将您的TweetCorpus对象从语料库返回转换为字符向量。

要解决此问题,请切换预处理的顺序,以便在之前使用iconv 将推文转换为Corpus对象:

TweetList <- c("hello", "world", "Hooray", "yep")
TweetList <-  iconv(TweetList, to ="utf-8")
TweetCorpus <- Corpus(VectorSource(TweetList))