2016-12-13 83 views
2

我和朋友正在努力将我们收集的一些tweets转换为dtm,以便能够在R中使用机器学习来运行情感分析。该任务必须在R中执行,因为它是在我们大学的考试中,R被要求用作工具。删除DocumentTermMatrix中的单词

最初我们收集了一个较小的样本,以便测试我们的代码是否正常工作,然后才开始编码较大的数据集。我们的问题是,我们似乎无法弄清楚如何从dtm中删除自定义单词。我们到目前为止的代码看起来是这样的(我们主要使用TM封装):

file <- read.csv("Tmix.csv", 
      row.names = NULL, sep=";", header=TRUE) #just for loading the dataset 

tweetsCorpus <- Corpus(VectorSource(file[,1])) 

tweetsDTM <- DocumentTermMatrix(tweetsCorpus, 
           control = list(verbose = TRUE, 
               asPlain = TRUE, 
               stopwords = TRUE, 
               tolower = TRUE, 
               removeNumbers = TRUE, 
               stemWords = FALSE, 
               removePunctuation = TRUE, 
               removeSeparators = TRUE, 
               removeTwitter = TRUE, 
               stem = TRUE, 
               stripWhitespace = TRUE, 
               removeWords = c("customword1", "customword2", "customword3"))) 

我们也尝试转换为DTM,使用removeWords命令之前删除的话,连同所有的“在tm包中使用removeXXX命令,然后将其转换为dtm,但似乎不起作用。

重要的是我们不要简单地删除所有单词,即5个或更少的观察值。我们需要所有的观测资料,除了我们想要删除的观测资料,例如https-adresses和类似的资料。

有谁知道我们是怎么做到的?

还有第二个问题:是否有更简单的方法可以删除以https开头的所有单词,而不必将所有地址单独写入代码。例如,我们正在编写"httpstcokozcejeg", "httpstcolskjnyjyn", "httpstcolwwsxuem"作为从数据中删除的单个自定义单词。

注意:我们知道RemoveWords对我们的问题是一个可怕的解决方案,但我们无法弄清楚如何去做。

回答

3

您可以使用正则表达式,例如:

gsub("http[a-z]*","","httpstcolwwsxuem here") 
[1] " here" 

假设你删除了tweetsCorpus标点符号/数字,您可以使用以下命令:

1-直接GSUB

tweetsCorpus <- gsub("http[a-z]*","",tweetsCorpus[[1]][[1]]) 

2- TM :: tm_map,content_transformer

library(tm) 

RemoveURL <- function(x){ 
     gsub("http[a-z]*","",x) 
} 

tweetsCorpus <- tm_map(tweetsCorpus, content_transformer(RemoveURL)) 
+0

**非常感谢!**只是为了正确地理解代码,我们只需要在你的代码运行的第一个行权?或者第二行是干什么的? – Nordsted

+0

第一个是一个一般的例子。然后,两种方法与直接gsub或tm_map和content_transformer混淆。 – OmaymaS