我通过使用tm包在R中构建了一个语料库。我想改变频率边界,只保留在整个文档中重复至少4次的单词。之后,我需要根据这些术语构建文档术语矩阵。
'数据'是一个45k乘2的矩阵。第一列是“文本”,每行平均包含10个单词。第二列是“代码”,其中包含每行的5位数代码。
“文本”中的大约15k个单词重复一次或两次。我想删除它们然后构建文档术语矩阵。
这是我尝试过的代码:
MyCorpus <- Corpus(VectorSource(Data$Text))
MyCorpus <- tm_map(MyCorpus , removeWords, stopwords('english'))
MyCorpus <- tm_map(MyCorpus , stripWhitespace)
MyCorpus <- termFreq(MyCorpus , control = list(local = c(4, Inf)))
但我在第4行遇到了这个错误:
错误:inherits(doc,“TextDocument”)不为TRUE
我该怎么办?
答案 0 :(得分:1)
termFreq
旨在用于文档,而不是语料库。如果要在构建DocumentTermMatrix时过滤频率,请使用DocumentTermMatrix函数
DTM <- DocumentTermMatrix(MyCorpus , control = list(bounds=list(global = c(4, Inf))))
这是一个例子......
library(tm)
Data<-data.frame(Text=c("aaa bbb aaa ddd","bbb aaa aaa bbb ccc","bbb aaa aaa bbb ddd", "aaa bbb ddd"))
MyCorpus <- Corpus(VectorSource(Data$Text))
MyCorpus <- tm_map(MyCorpus , removeWords, stopwords('english'))
MyCorpus <- tm_map(MyCorpus , stripWhitespace)
DTM <- DocumentTermMatrix(MyCorpus , control = list(bounds = list(global=c(2, Inf))))
inspect(DTM)
# <<DocumentTermMatrix (documents: 4, terms: 3)>>
# Non-/sparse entries: 11/1
# Sparsity : 8%
# Maximal term length: 3
# Weighting : term frequency (tf)
# Terms
# Docs aaa bbb ddd
# 1 2 1 1
# 2 2 2 0
# 3 2 2 1
# 4 1 1 1
这里我们使用全局界限来确保我们只保留至少出现在两个文档中的单词。您还可以设置本地界限,要求在每个文档中出现一定次数的单词。