首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用R中的‘tm’包设置语料库中术语的TF权重

如何使用R中的‘tm’包设置语料库中术语的TF权重
EN

Stack Overflow用户
提问于 2016-09-12 18:33:51
回答 2查看 835关注 0票数 1

我想知道如何获得tm包中的术语频率权重,即(tf=文档中的术语/总术语)`

代码语言:javascript
运行
复制
MyMatrix <- DocumentTermMatrix(a, control = list(weight= weightTf))

在我使用这个权重之后,它显示了词条的频率,而不是TF权重,如下所示

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-12 19:10:23

例如

代码语言:javascript
运行
复制
library(tm)
corp <- Corpus(VectorSource(c(doc1="hello world", doc2="hello new world")))
myfun <-  WeightFunction(function(m) { 
  cs <- slam::col_sums(m) 
  m$v <- m$v/cs[m$j] 
  return(m) 
}, "Term Frequency by Total Document Term Frequency", "termbytot") 
dtm <- DocumentTermMatrix(corp, control = list(weighting = myfun))
inspect(dtm)
# <<DocumentTermMatrix (documents: 2, terms: 3)>>
# Non-/sparse entries: 5/1
# Sparsity           : 17%
# Maximal term length: 5
# 
#     Terms
# Docs     hello       new     world
#    1 0.5000000 0.0000000 0.5000000
#    2 0.3333333 0.3333333 0.3333333
票数 0
EN

Stack Overflow用户

发布于 2016-09-12 18:45:55

像MyMatrix / rowSums(MyMatrix)这样的东西应该会给你想要的结果。

但是,如果文档没有术语(文档的DTM全为零),上面的操作将产生一行NaN,如下所示(就像您的例子一样)

代码语言:javascript
运行
复制
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

因此,更好的方法是:

代码语言:javascript
运行
复制
t(apply(myMatrix, 1, function(x) if(sum(x) != 0) x / sum(x) else x))

得到预期的结果:

代码语言:javascript
运行
复制
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.1428571
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39448360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档