我用下面的代码来清理Tweet中的用户名的语料库。但有些名字在词云中。为什么它们是错误的?
removeUsername <- function(x) gsub('@[^[:space:]]*', '', x)
removeURL <- function(x) gsub("http[:alnum:]*","",x)
removeNumPunct<- function(x) gsub("[^[:alpha:][:space:]]*","",x)
removeUsername <- function(x) gsub('@[^[:space:]]*', '', x)
mycorpus <- tm_map(mycorpus,PlainTextDocument)
mycorpus <- tm_map(mycorpus,content_transformer(removeURL))
mycorpus <- tm_map(mycorpus,content_transformer(tolower))
mycorpus <- tm_map(mycorpus,stripWhitespace)
mycorpus <- tm_map(mycorpus,content_transformer(removeNumPunct))
mycorpus <- tm_map(mycorpus,content_transformer(removeNumbers))
mycorpus <- tm_map(mycorpus, content_transformer(removeUsername))
Stopwords <- readLines("/Users/Stopwords.txt")
mycorpus <- tm_map(mycorpus, function(x) removeWords(x, Stopwords ))
你的问题在于你执行代码的顺序。你首先删除标点符号,然后你想删除twitter的句柄。这将不会被发现,因为删除标点符号已经删除了@。从剥离空白处也是一样,这一步你应该在最后做。
下面的顺序应该可以解决twitter句柄和whitespace的问题。
mycorpus <- tm_map(mycorpus, PlainTextDocument)
mycorpus <- tm_map(mycorpus, content_transformer(removeUsername))
mycorpus <- tm_map(mycorpus, content_transformer(removeURL))
mycorpus <- tm_map(mycorpus, content_transformer(tolower))
mycorpus <- tm_map(mycorpus, content_transformer(removeNumPunct))
mycorpus <- tm_map(mycorpus, content_transformer(removeNumbers))
mycorpus <- tm_map(mycorpus, stripWhitespace)
另外,tm已经包含了去除标点符号和数字的功能,可以不使用 content_transformer
,就像下面的例子。
mycorpus <- tm_map(mycorpus, removePunctuation)
mycorpus <- tm_map(mycorpus, removeNumbers)
你可以检查包quanteda。它有很多这样的twitter函数已经作为标志包含在 tokens
职能。