Как удалить пустые документы из матрицы терминов документа в R

Я выполняю кластеризацию 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 ответа

Если в вашем документе нет записи / слова, вы можете сделать это:

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

По сути, выше мы сначала суммируем слова в каждом документе. Позже мы подмножество dtm для документов, которые не являются пустыми на основе более раннего суммирования слов в каждом документе.

Очевидно, что вы не можете сделать это с другим tm_map,

Но пакет текстового майнинга также имеет tm_filter, который вы можете использовать для фильтрации пустых документов.

Другие вопросы по тегам