如何从R中的文档术语矩阵中删除空文档

时间:2017-12-02 06:09:12

标签: r cluster-analysis k-means corpus

我正在为推特数据执行kmeans聚类,为此我正在清理推文并创建语料库。后来我找到了dtm并使用了tf-idf理论。

但我的dtm有很少的空文档,我想删除,因为kmeans无法运行空文档。

这是我的代码:

removeURL <- function(x) gsub("http[[:alnum:][:punct:]]*", "", x) 
replacePunctuation <- function(x)
{
  x <- tolower(x)
  x <- gsub("[.]+[ ]"," ",x)
  x <- gsub("[:]+[ ]"," ",x)
  x <- gsub("[?]"," ",x)
  x <- gsub("[!]"," ",x)
  x <- gsub("[;]"," ",x)
  x <- gsub("[,]"," ",x)
  x <- gsub("[@]"," ",x)
  x <- gsub("[???]"," ",x)
  x <- gsub("[€]"," ",x)
  x

}

myStopwords <- c(stopwords('english'), "rt")


#preprocessing
tweet_corpus <- Corpus(VectorSource(tweet_raw$text))
tweet_corpus_clean <- tweet_corpus %>%
  tm_map(content_transformer(tolower)) %>% 
  tm_map(removeNumbers) %>%
  tm_map(removeWords,myStopwords) %>%
  tm_map(content_transformer(replacePunctuation)) %>%
  tm_map(stripWhitespace)%>%
  tm_map(content_transformer(removeURL))


dtm <- DocumentTermMatrix(tweet_corpus_clean ) 

#tf-idf

mat4 <- weightTfIdf(dtm) #when i run this, i get 2 docs that are empty
mat4 <- as.matrix(mat4)  

2 个答案:

答案 0 :(得分:0)

显然,您无法使用其他tm_map

但是文本挖掘包还有tm_filter,您可以使用它来过滤空文档。

答案 1 :(得分:0)

如果您的文档中没有任何条目/单词,那么您可以这样做:

rowSumDoc <- apply(dtm, 1, sum) 
dtm2 <- dtm[rowSumDoc > 0, ] 

基本上,我们首先在每个文档中总结单词。之后,我们根据每个文档中较早的单词总和,对非空文档进行子集dtm