我想知道如何获得tm包中的术语频率权重,即(tf=文档中的术语/总术语)`
MyMatrix <- DocumentTermMatrix(a, control = list(weight= weightTf))在我使用这个权重之后,它显示了词条的频率,而不是TF权重,如下所示
Doc(1) 1 0 0 3 0 0 2
Doc(2) 0 0 0 0 0 0 0
Doc(3) 0 5 0 0 0 0 1
Doc(4) 0 0 0 2 2 0 0
Doc(5) 0 4 0 0 0 0 1
Doc(6) 5 0 0 0 1 0 0
Doc(7) 0 5 0 0 0 0 0
Doc(8) 0 0 0 1 0 0 7发布于 2016-09-12 18:45:55
像MyMatrix / rowSums(MyMatrix)这样的东西应该会给你想要的结果。
但是,如果文档没有术语(文档的DTM全为零),上面的操作将产生一行NaN,如下所示(就像您的例子一样)
Doc(1) 0.1111111 0 0 0.5555556 0.1111111 0.2222222 0.0000000
Doc(2) 0.0000000 1 0 0.0000000 0.0000000 0.0000000 0.0000000
Doc(3) NaN NaN NaN NaN NaN NaN NaN
Doc(4) 1.0000000 0 0 0.0000000 0.0000000 0.0000000 0.0000000
Doc(5) 0.0000000 0 0 0.0000000 0.2857143 0.5714286 0.1428571因此,更好的方法是:
t(apply(myMatrix, 1, function(x) if(sum(x) != 0) x / sum(x) else x))得到预期的结果:
Doc(1) 0.1111111 0 0 0.5555556 0.1111111 0.2222222 0.0000000
Doc(2) 0.0000000 1 0 0.0000000 0.0000000 0.0000000 0.0000000
Doc(3) 0.0000000 0 0 0.0000000 0.0000000 0.0000000 0.0000000
Doc(4) 1.0000000 0 0 0.0000000 0.0000000 0.0000000 0.0000000
Doc(5) 0.0000000 0 0 0.0000000 0.2857143 0.5714286 0.1428571https://stackoverflow.com/questions/39448360
复制相似问题