R - 计算包含术语的文档数

时间:2017-04-19 18:54:35

标签: r text-mining corpus linguistics

我正在使用R的tm库来查看语料库中的术语频率。最后,我想复制this paper第42页上的td-idf术语加权方案。到目前为止,这是我的代码:

setwd("C:/Users/George/Google Drive/Agility")

library(tm)

cname <- ("C:/Users/George/Google Drive/R Templates/corpus")   

corpus <- Corpus(DirSource(cname))

#Cleaning
corpus <- tm_map(corpus, tolower)
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, removeWords, c("a","the","an","that","and"))

#Create a term document matrix
tdm1 <- TermDocumentMatrix(corpus)

m1 <- as.matrix(tdm1)

#run frequencies
word.freq <- sort(rowSums(m1), decreasing=T)

#convert matrix to dataframe
frequencies<-as.data.frame(as.table(word.freq))

print(frequencies)

这很好用,给我一个术语列表,按照它们出现在整个语料库中的次数排序:

                Var1 Freq
1                him 1648
2               unto 1486
3               they 1168
4               them  955
5                not  940

但是,如果不是获得频率的总计数,我想计算包含该术语的语料库中的文档数量 - 无论在该文档中使用它的次数如何?

例如,第一个条目可能不是1648次使用“他”这个词,而是出现在25个语料库的文档中。

谢谢

1 个答案:

答案 0 :(得分:0)

一种引导式的解决方案,只需一次更改即可为您提供所有文档数:

word.freq <- sort(rowSums(m1), decreasing=T)

收件人:

word.freq2 <- sort(rowSums(m1 > 0), decreasing=T)

word.freq保留了语料库中术语使用的频率,而word.freq2分别保留了包含每个术语的文档数。