从DocumentTermMatrix中删除单词

时间:2016-12-13 11:29:17

标签: r tm

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

在我们开始编写更大的数据集之前,我们最初收集了一个较小的样本,以测试我们的代码是否正常工作。我们的问题是,我们似乎无法弄清楚如何从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命令,以及所有&#34; removeXXX&#34; tm包中的命令,然后将其转换为dtm,但它似乎不起作用。

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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