我正在尝试使用下面的函数计算词频反向文档频率,以获得归一化的权重。当行数为百行时,结果非常快,但当行数为数千行(仅两万行)时,几乎需要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)
}发布于 2018-04-12 06:27:23
我推荐使用text2vec::的TfIdf()类--与text2vec::create_dtm()创建的矩阵配合使用时,它的速度非常快,如果您用过它的话,它的界面类似于sklearn。
请查看矢量化vignette的this part,以获取tfidf权重的实际应用示例。
(更广泛地说,我发现text2vec::的大部分核心功能都快得惊人,所以如果您正在为NLP使用R,这是一个很好的选择:p)
https://stackoverflow.com/questions/49784211
复制相似问题