Пакет R tm создает матрицу из N наиболее часто встречающихся терминов

У меня есть termDocumentMatrix, созданный с использованием пакета tm в R.

Я пытаюсь создать матрицу/фрейм данных, в которой есть 50 наиболее часто встречающихся терминов.

Когда я пытаюсь преобразовать в матрицу, я получаю эту ошибку:

> ap.m <- as.matrix(mydata.dtm)
Error: cannot allocate vector of size 2.0 Gb

Поэтому я попытался преобразовать разреженные матрицы с помощью пакета Matrix:

> A <- as(mydata.dtm, "sparseMatrix") 
Error in as(from, "CsparseMatrix") : 
  no method or default for coercing "TermDocumentMatrix" to "CsparseMatrix"
> B <- Matrix(mydata.dtm, sparse = TRUE)
Error in asMethod(object) : invalid class 'NA' to dup_mMatrix_as_geMatrix

Я пытался получить доступ к различным частям tdm, используя:

> freqy1 <- data.frame(term1 = findFreqTerms(mydata.dtm, lowfreq=165))
> mydata.dtm[mydata.dtm$ Terms %in% freqy1$term1,]
Error in seq_len(nr) : argument must be coercible to non-negative integer

Вот еще информация:

> str(mydata.dtm)
List of 6
 $ i       : int [1:430206] 377 468 725 3067 3906 4150 4393 5188 5793 6665 ...
 $ j       : int [1:430206] 1 1 1 1 1 1 1 1 1 1 ...
 $ v       : num [1:430206] 1 1 1 1 1 1 1 1 2 3 ...
 $ nrow    : int 15643
 $ ncol    : int 17207
 $ dimnames:List of 2
  ..$ Terms: chr [1:15643] "000" "0mm" "100" "1000" ...
  ..$ Docs : chr [1:17207] "1" "2" "3" "4" ...
 - attr(*, "class")= chr [1:2] "TermDocumentMatrix" "simple_triplet_matrix"
 - attr(*, "Weighting")= chr [1:2] "term frequency" "tf"
> mydata.dtm
A term-document matrix (15643 terms, 17207 documents)

Non-/sparse entries: 430206/268738895
Sparsity           : 100%
Maximal term length: 54 
Weighting          : term frequency (tf)

Мой идеальный результат примерно такой:

term      frequency
the         2123
and         2095
able         883
...          ...

Какие-либо предложения?


person screechOwl    schedule 16.07.2012    source источник


Ответы (1)


Матрицы терминов-документов в tm уже созданы как разреженные матрицы. Здесь mydata.tdm$i и mydata.tdm$j — векторы индексов матрицы, а mydata.tdm$v — связанный вектор частот. Чтобы вы могли создать разреженную матрицу записи:

sparseMatrix(i=mydata.tdm$i, j=mydata.tdm$j, x=mydata.tdm$v)

Затем вы можете использовать rowSums и связать интересующие вас строки с терминами, которые они обозначают, с помощью $Terms.

person Pop    schedule 17.07.2012
comment
HTH: term.freq ‹- rowSums(as.matrix(tdm)) term.freq ‹- subset(term.freq, term.freq ›= 50) tdm_matrix ‹- as.matrix(tdm) tfMatrix ‹- tdm_matrix[names( термин.частота),] - person aloplop85; 19.09.2015