首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >术语文档熵计算

术语文档熵计算
EN

Stack Overflow用户
提问于 2018-02-10 19:11:07
回答 1查看 722关注 0票数 3

使用dtm,就有可能取频率这个词。

怎么可能或者有什么简单的方法来计算呢?它对某些文件中频率较低的术语给予了更高的权重。

代码语言:javascript
复制
entropy = 1 + (Σj pij log2(pij)/log2n

pij = tfij / Σj tfij

tfij是文档j中单词i发生的次数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 22:03:57

下面是一个这样的函数,尽管可以通过维护p_ij和日志计算中的稀疏性来改进它(例如,dfm_tfidf()就是这样编写的)。注意,我稍微修改了公式,因为(根据LSI和其他来源)在和前面应该有一个减号。

代码语言:javascript
复制
library("quanteda")
textstat_entropy <- function(x, base = exp(1), k = 1) {
    # this works because of R's recycling and column-major order, but requires t()
    p_ij <- t(t(x) / colSums(x))

    log_p_ij <- log(p_ij, base = base)
    k - colSums(p_ij * log_p_ij / log(ndoc(x), base = base), na.rm = TRUE)
}

textstat_entropy(data_dfm_lbgexample, base = 2)
#        A        B        C        D        E        F        G        H        I        J        K 
# 1.000000 1.000000 1.000000 1.000000 1.000000 1.045226 1.045825 1.117210 1.173655 1.277210 1.378934 
#        L        M        N        O        P        Q        R        S        T        U        V 
# 1.420161 1.428939 1.419813 1.423840 1.436201 1.440159 1.429964 1.417279 1.410566 1.401663 1.366412 
#        W        X        Y        Z       ZA       ZB       ZC       ZD       ZE       ZF       ZG 
# 1.302785 1.279927 1.277210 1.287621 1.280435 1.211205 1.143650 1.092113 1.045825 1.045226 1.000000 
#        ZH       ZI       ZJ       ZK 
# 1.000000 1.000000 1.000000 1.000000 

这与lsa包中的权重函数匹配,当基值为e时。

代码语言:javascript
复制
library("lsa")
all.equal(
    gw_entropy(as.matrix(t(data_dfm_lbgexample))),
    textstat_entropy(data_dfm_lbgexample, base = exp(1))
)
# [1] TRUE
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48724588

复制
相关文章

相似问题

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