Поскольку вы не привели воспроизводимый пример, я приведу его, используя набор данных crude
, доступный в пакете tm
.
Вы можете сделать это (как минимум) 2 разными способами. Но все, что превращает разреженную матрицу в плотную матрицу, может использовать много памяти. Поэтому я дам вам 2 варианта. Первый из них более дружественный к памяти, так как использует разреженную матрицу TDM. Второй, сначала преобразует TDM в плотную матрицу, прежде чем создать вектор частоты.
library(tm)
data("crude")
crude <- as.VCorpus(crude)
crude <- tm_map(crude, stripWhitespace)
crude <- tm_map(crude, removePunctuation)
crude <- tm_map(crude, content_transformer(tolower))
crude <- tm_map(crude, removeWords, stopwords("english"))
tdm <- TermDocumentMatrix(crude)
# Making use of the fact that a tdm or dtm is a simple_triplet_matrix from slam
my_func <- function(data, word){
slam::row_sums(data[data$dimnames$Terms == word, ])
}
my_func(tdm, "crude")
crude
21
my_func(tdm, "oil")
oil
85
# turn tdm into dense matrix and create frequency vector.
freq <- rowSums(as.matrix(tdm))
freq["crude"]
crude
21
freq["oil"]
oil
85
редактирование:
По запросу в комментарии:
# all words starting with cru. Adjust regex to find what you need.
freq[grep("^cru", names(freq))]
crucial crude
2 21
# separate words
freq[c("crude", "oil")]
crude oil
21 85