如何计算R中的文档频率?

时间:2015-06-16 23:54:41

标签: r

我有一个名为“pertanian”的数据框:

DOCS <- c(1:5)
TEXT <- c("tanaman jagung seumur jagung " , 
          "tanaman jagung kacang ketimun rusak dimakan kelinci" , 
          "ladang diserbu kelinci tanaman jagung kacang ketimun rusak dimakan" , 
          "ladang diserbu kelinci tanaman jagung kacang ketimun rusak dimakan" , 
          "ladang diserbu kelinci tanaman jagung kacang ketimun rusak ")
pertanian <- data.frame(DOCS , TEXT)

从我创建的数据框,然后我创建一个这样的术语文档频率:

term     DOCS 1  DOCS 2  DOCS 3  DOCS 4  DOCS 5
dimakan    0       1       1       1       0
diserbu    0       0       1       1       1
jagung     2       1       1       1       1
kacang     0       1       1       1       1
kelinci    0       1       1       1       1
ketimun    0       1       1       1       1
ladang     0       0       1       1       1
rusak      0       1       1       1       1
seumur     1       0       0       0       0
tanaman    1       1       1       1       1

从上面的术语文档矩阵中,我想制作一个像这样的文档频率:

Term        DF
dimakan     3 
diserbu     3
jagung      5
kacang      4
kelinci     4
ketimun     4
ladang      3
rusak       4
seumur      1
tanaman     5

我试过这段代码:

myCorpus <- Corpus(VectorSource(pertanian$TEXT))
myCorpus2 <- tm_map(myCorpus, PlainTextDocument)
tdm <- TermDocumentMatrix(myCorpus2)
temp<-inspect(tdm)
colnames(temp) <- paste("DOCS", pertanian$DOCS)
Doc.Freq<-data.frame(apply(temp, 1, sum))
#rename column name
Doc.Freq <- cbind(Term = rownames(Doc.Freq), Doc.Freq)
row.names(Doc.Freq) <- NULL
names(Doc.Freq)[names(Doc.Freq)=="apply.temp..1..sum."] <- "DF"

但是,输出结果产生“术语频率”而不是“文档频率”, 因为术语'jagung'计算为6,文档频率应为5

2 个答案:

答案 0 :(得分:5)

这样的东西?

注意:这里我假设您所需的输出有错误,并且5个文档中有4个存在 kacang

$("#test-strong", example).css({"background-color": "#ffe", "border": "5px solid #ccc", "font-size": "30px", "color":"red", "float":"right"});

给出了:

library(tm)
library(dplyr)

v <- Corpus(VectorSource(TEXT))

data.frame(inspect(TermDocumentMatrix(v))) %>%
  add_rownames() %>%
  mutate(DF = rowSums(.[-1] >= 1)) %>%
  select(Term = rowname, DF)

或者你可以这样做:

#Source: local data frame [10 x 2]
#
#      Term DF
#1  dimakan  3
#2  diserbu  3
#3   jagung  5
#4   kacang  4
#5  kelinci  4
#6  ketimun  4
#7   ladang  3
#8    rusak  4
#9   seumur  1
#10 tanaman  5

答案 1 :(得分:1)

试试这个:

dd <- strsplit(as.character(TEXT),' ') 

> transform(table(unlist(lapply(dd,unique))))
#      Var1 Freq
#1  dimakan    3
#2  diserbu    3
#3   jagung    5
#4   kacang    4
#5  kelinci    4
#6  ketimun    4
#7   ladang    3
#8    rusak    4
#9   seumur    1
#10 tanaman    5