Как удалить пустые документы из матрицы сроков документов в R - PullRequest
0 голосов
/ 06 мая 2018

У меня есть пустые документы в матрице терминов моего документа. Мне нужно их удалить. Это код, который я использовал для построения DocumentTermMatrix:

 tweets_dtm_tfidf <- DocumentTermMatrix(tweet_corpus, control = list(weighting = weightTfIdf))

И это предупреждение, которое я получаю:

Warning message:
In weighting(x) :
  empty document(s): 823 3795 4265 7252 7295 7425 8240 8433 9303 12160 12278 14465 15166 15485 15933 20775 21666 21807 26131 27039 34035 34050 34101

Я попытался удалить эти пустые документы, используя этот код:

rowTotals <- apply(tweets_dtm_tfidf , 1, sum)
dtm_tfidf   <- tweets_dtm_tfidf[rowTotals> 0, ]

Вот ошибка, которую я получаю, пытаясь удалить их:

> rowTotals <- apply(tweets_dtm_tfidf , 1, sum)

Error: cannot allocate vector of size 6.8 Gb

Есть идеи, как это сделать? Спасибо за любые предложения заранее.

1 Ответ

0 голосов
/ 06 мая 2018

Применяемая сумма преобразует вашу разреженную матрицу в плотную матрицу, и это расходует много памяти, если это большая разреженная матрица.

И функция apply не нужна. Есть функции для разреженных матриц. Поскольку dtm является simple_triplet_matrix, вы можете использовать row_sums из slam.

Следующее должно работать.

rowTotals <- slam::row_sums(tweets_dtm_tfidf)
dtm_tfidf <- dtm_tfidf[rowTotals > 0, ]

Но помните, что все, что вы делаете для извлечения ваших данных из разреженной матрицы, может привести к тому, что у вас будет большой объем памяти, если у вас много слов. Возможно, вы захотите использовать removeSparseTerms, прежде чем двигаться дальше.

...