是否有算法可以找到文本的香农熵?

时间:2012-04-08 21:04:57

标签: algorithm text

我知道英语的Shannon熵是每个字母1.0到1.5位,有些人说每个字母低至0.6到1.3位但是我想知道有没有办法运行一个查看大量文本的算法然后确定集合文本的期望值是集合文本的每个字母的.08位?

3 个答案:

答案 0 :(得分:4)

entropy rate of a language的数学定义是,如果你有一个用该语言生成字符串的源,n th 符号的熵限制,以n-为条件1个先前的(假设源是stationary)。

这种来源的足够近似是大量的英文文本。 Open national american corpus非常好(100M字符,涵盖所有类型的书面文本)。然后,近似上限的基本算法是针对给定的n,查看文本中出现的所有n-gram,并建立对参与的条件熵的定义中出现的各种概率的统计估计。计算熵率。

full source code要做的很简单(约40行python代码)。我已经完成了blog post about estimating the entropy rate of English recently更多细节,包括数学定义和完整实现。它还包括对各种相关论文的引用,包括Shannon's original article

答案 1 :(得分:2)

估计文本的香农熵值。永远找不到人的力量。您可以通过在其上运行有效的压缩算法(PAQ)来估计它,或者使用人来预测给定字符串的下一个字母。人类会做得很好,因为他们运用语义知识,而不仅仅是统计知识或句法知识。

简短回答:尝试尽可能压缩您拥有的数据/文本,并计算您根据经验需要的位数。

这取决于具体的算法,你可以得到的数字。这将始终只是香农熵的上限(请记住,确切的值永远不会被知道)。

答案 2 :(得分:0)

Oli Charlesworth是正确的,熵是根据概率定义的,而不是文本。

唯一可以产生数据无序度的方法是使用Kolmogorov Complexity。虽然这也存在问题,但特别是它是不可计算的,并且尚未严格定义,因为必须随意选择一种基本语言 - 因为Oli将其称为“上下文”。如果测量的无序是相对于将要处理数据的事物,则可以解决这种明确定义。因此,在考虑在特定计算机上进行压缩时,基本语言将是针对该计算机的程序集。

所以你可以按如下方式定义文本的无序:

用汇编语言编写的输出文本的最短程序的长度。