我正在尝试使用以下函数计算术语频率反向文档频率以获得标准化权重。当行数为百时,结果非常快,但是,当行数为千(仅2万)时,需要将近3到4分钟才能得到结果。有人能指出我正确的方向来减少计算时间吗?
tfidf=function(mat){
mat = mat[,names]
tf = mat/rowSums(mat)
id=function(col){sum(!col==0)}
idf = log10(nrow(mat)/apply(mat, 2, id))
tfidf = mat
for(word in names(idf)){tfidf[,word] <- tf[,word] * idf[word]}
return(tfidf)
}
答案 0 :(得分:1)
我建议使用text2vec::
的TfIdf()
类 - 当与text2vec::create_dtm()
创建的矩阵协调使用时,它非常快。如果您曾经使用过,那么界面类似于sklearn
。
查看矢量化插图的this part,了解tfidf加权的示例。
(更一般地说,我发现大多数text2vec::
的核心功能都非常快,所以如果你使用R代表NLP,这是一个不错的选择:p)