如何在R中的DTM中找到术语频率?

时间:2015-02-18 09:50:49

标签: r text-mining

我一直在使用tm包创建DocumentTerm Matrix,如下所示:

library(tm)
library(RWeka)
library(SnowballC)
src <- DataframeSource(data.frame(data3$JobTitle))

# create a corpus and transform data
# Sets the default number of threads to use
options(mc.cores=1)
c_copy <- c <- Corpus(src)
c <- tm_map(c, content_transformer(tolower), mc.cores=1)
c <- tm_map(c,content_transformer(removeNumbers), mc.cores=1)
c <- tm_map(c,removeWords, stopwords("english"), mc.cores=1)
c <- tm_map(c,content_transformer(stripWhitespace), mc.cores=1)

#make DTM
dtm <- DocumentTermMatrix(c, control = list(tokenize = BigramTokenizer))

现在,DTM很好 - 我想要做的是获取DTM中频繁术语的频率。显然,我可以使用findFreqTerms来获取条件本身,但不能使用实际频率。 termFreq仅适用于TextDocument,而不适用于DTM或TDM - 任何想法?

str的输出 - 常用术语以$ Terms:

> str(dtm)
List of 6
 $ i       : int [1:190] 1 2 3 4 5 6 7 8 9 10 ...
 $ j       : int [1:190] 1 2 3 4 5 6 7 8 9 10 ...
 $ v       : num [1:190] 1 1 1 1 1 1 1 1 1 1 ...
 $ nrow    : int 119
 $ ncol    : int 146
 $ dimnames:List of 2
  ..$ Docs : chr [1:119] "1" "2" "3" "4" ...
  ..$ Terms: chr [1:146] "account administrator" "account assistant" "account director" "account executive" ...
 - attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
 - attr(*, "weighting")= chr [1:2] "term frequency" "tf"

2 个答案:

答案 0 :(得分:3)

感谢NicE的建议 - 它运作良好。添加加权参数允许我在检查DTM时输出术语频率。简单的事情,然后总结每列。

dtm <- DocumentTermMatrix(c, control = list(tokenize = BigramTokenizer, weighting=weightTf))
freqs <- as.data.frame(inspect(dtm))
colSums(freqs)

答案 1 :(得分:3)

您可以使用Tyler Rinker的优秀qdap套餐。 freq_term函数给出了术语及其频率。此示例采用30个最常用的术语,如果他们至少有4个字母,并使用qdap的一个禁用词包 - 这比内置的tm停用词更广泛英语(200对约175)。

qdap.freq <- freq_terms(dtm, top = 20, at.least = 4, stopwords = Top200Words)