R中的Quanteda-tf-idf变换函数
我使用了quanteda软件包,得到了两个巨大的dfm序列和有效 列和有效列相同 我知道使用R中的Quanteda-tf-idf变换函数,r,tf-idf,quanteda,R,Tf Idf,Quanteda,我使用了quanteda软件包,得到了两个巨大的dfm序列和有效 列和有效列相同 我知道使用dfm\u tfidf可以在tain上快速获得tfidf重量, 但是我的问题是如何在tain-idf的基础上获得有效的tfidf 我尝试使用pblappy和for循环,但运行时间非常慢 这是我的代码,如何在quanteda中基于其他idf转换tfidf,或者 任何其他加速的方法 ## ## ## Idf Idf <- function(x){ n <- nrow(x) che
dfm\u tfidf
可以在tain上快速获得tfidf重量,
但是我的问题是如何在tain-idf的基础上获得有效的tfidf
我尝试使用pblappy
和for循环,但运行时间非常慢
这是我的代码,如何在quanteda中基于其他idf转换tfidf,或者
任何其他加速的方法
##
##
## Idf
Idf <- function(x){
n <- nrow(x)
check <- colSums(dfm_weight(x, "boolean"))
sure <- ifelse(check==0, n, check)
idf <- log10(n/sure)
return(idf)
}
##
##
## train document term matrix
## Document-feature matrix of: 1,715,438 documents, 184,554 features (100% sparse).
TrainWcm
> head(TrainWcm[,1:4])
Document-feature matrix of: 6 documents, 4 features (70.8% sparse).
6 x 4 sparse Matrix of class "dfm"
features
docs what changes will you
text1 1 1 1 2
text2 0 0 0 0
text3 1 0 0 0
text4 1 0 0 0
text5 0 0 0 0
text6 1 0 0 0
##
##
## valid document term matrix
## Document-feature matrix of: 391,836 documents, 184,554 features (100% sparse).
ValidWcm
> head(ValidWcm[,1:4])
Document-feature matrix of: 6 documents, 4 features (87.5% sparse).
6 x 4 sparse Matrix of class "dfm"
features
docs what changes will you
text1 1 0 0 0
text2 0 0 0 0
text3 1 0 0 1
text4 0 0 0 0
text5 0 0 0 0
text6 0 0 0 0
##
##
## Idf from train
WcmIdf <- Idf(TrainWcm)
##
##
## First method
TrainTfdf <- TrainWcm
ValidTfdf <- ValidWcm
n <- seq(length(WcmIdf))
for( i in n ){
TrainTfdf[,i] <- TrainWcm[,i]*WcmIdf[i]
ValidTfdf[,i] <- ValidWcm[,i]*WcmIdf[i]
cat("\r",i)
}
##
##
## Second method
n <- seq(length(WcmIdf))
TrainTfidf <- pblapply(n, function(i) TrainWcm[,i] * WcmIdf[i]) %>% do.call("cbind", .)
ValidTfidf <- pblapply(n, function(i) ValidWcm[,i] * WcmIdf[i]) %>% do.call("cbind", .)
##
##
##以色列国防军
Idf我使用调试和修改的dfm_tfidf,并得到解决方案。
参数idf
是上述idf
函数的输出
##
##
## Tfidf
Tfidf <- function(dfm, idf = NULL){
require(quanteda)
if(is.null(idf)){
output <- dfm_tfidf(dfm)
return(output)
}else{
output <- dfm
j <- as(dfm, "dgTMatrix")@j + 1
output@x <- dfm@x * idf[j]
return(output)
}
}
##
##
##Tfidf
Tfidf根据问题,有效的和序列dfm需要有共同点,据我所知,因此可以尝试将这两个文档集或其各自的语料库组合起来,然后计算强大的TF-IDF
矩阵
由于Valid和train都有公共列,所以很容易将它们合并或将一个附加到另一个
稍后,在计算TF-IDF
矩阵后,您可以将它们重新划分为train和Valid 你能发布一些样本数据供我们使用吗?只需粘贴head(df)
的输出,格式为codeYes,我在注释中打印dfm的head。获取文档频率的最快方法是docfreq()
。提供一个例子,并清楚地解释您想要的输出,我们可以进一步完善这一点。