从R中的dtm按文档的频率提取顶部特征

时间:2017-11-16 11:42:58

标签: r text-mining tm term-document-matrix

我有一个dtm,想要从文档术语矩阵中按每个文档的频率提取前5个术语。

我使用tm包

构建了 dtm
  Terms                     
Docs aaaa aac abrt abused accept accepted
1 0 0 0 0 0 0 
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0

所需的输出格式应为:

Id   
1   Term1 Term2 Term3 Term4 Term5
2   Term1 Term2 Term3 Term4 Term5
and so on for all the documents.

我已尝试过stackoverflow和其他来源提供的所有解决方案 比如Make dataframe of top N frequent terms for multiple corpora using tm package in R(转换为tdm并尝试将其输出到输出表单但不起作用)和其他人注意到它们有效。

1 个答案:

答案 0 :(得分:1)

使用Quanteda:

library(quanteda)
txt <- c("hello world world fizz", "foo bar bar buzz")
dfm <- dfm(txt)
topfeatures(dfm, n = 2, groups = seq_len(ndoc(dfm)))
# $`1`
# world hello 
# 2     1 
# 
# $`2`
# bar foo 
# 2   1 

您还可以在DocumentTermMatrixdfm之间进行转换。

或使用经典tm

library(tm)
packageVersion("tm")
# [1] ‘0.7.1’
txt <- c(doc1="hello world world", doc2="foo bar bar fizz buzz")
dtm <- DocumentTermMatrix(Corpus(VectorSource(txt)))
n <- 5
(top <- findMostFreqTerms(dtm, n = n))
# $doc1
# world hello 
# 2     1 
# 
# $doc2
# bar buzz fizz  foo 
# 2    1    1    1 
do.call(rbind, lapply(top, function(x) { x <- names(x);length(x)<-n;x }))
# [,1]    [,2]    [,3]   [,4]  [,5]
# doc1 "world" "hello" NA     NA    NA  
# doc2 "bar"   "buzz"  "fizz" "foo" NA 

findMostFreqTermstm version 0.7-1起可用。