杰夫阿特伍德最近发布了一个CodeReview帖子的链接,他想知道社区是否可以改进他的“calculating entropy of a string”代码片段。他解释说,“我们正在计算Stack Overflow中一些字符串的熵,作为低质量的标志。”
他的方法的要点似乎是,如果计算字符串中唯一字符的数量,则表示熵(代码取自PieterG's answer):
int uniqueCharacterCount = string.Distinct().Count();
我不明白唯一字符数如何表示字符串的熵,以及字符串的熵如何表示低质量。我想知道在这方面有更多知识的人是否可以解释阿特伍德先生想要完成的事情。
谢谢!
答案 0 :(得分:6)
字符串'aaaaaaaaaaaaaaaaaaaaaaaaaa'具有非常低的熵,并且相当无意义。
字符串'blah blah blah blah blah blah blah blah blah'具有更高的熵,但仍然相当愚蠢,可以是a part of an attack。
具有与这些字符串相当的熵的帖子或评论可能不合适;它不能包含任何有意义的消息,甚至是垃圾链接。这样的帖子可以被过滤掉或保证额外的验证码。
答案 1 :(得分:6)
混淆似乎是因为这被用来阻止发布帖子 - 但事实并非如此。
这只是用于查找可能的低质量帖子的几种算法之一,显示在主持人工具的low quality posts tab (需要10k代表)上。实际人类仍然需要查看帖子。
我们的想法是抓住~~~~~~No.~~~~~~
或FUUUUUUUU------
等帖子,而不是抓住所有低质量的帖子。
至于“独特的字符数如何表示熵?” - 它确实没有。最热烈的答案完全忽视了这一点。
请参阅https://codereview.stackexchange.com/questions/868#878和https://codereview.stackexchange.com/questions/868#926
答案 2 :(得分:3)
让我们看看 Entropy (information theory) 上的维基百科条目:
在信息论中,熵是与随机变量相关的不确定性的度量。在这种情况下,该术语通常指的是香农熵,它量化了信息中包含的信息的预期价值......
特别是英文信息:
根据Shannon基于人体实验的估计,英文文本的熵率在每个字母1.0到1.5位之间,或者每个字母低至0.6到1.3位。
换句话说,不仅仅是低熵是坏的,高熵是好的,反之亦然 - 有一个最佳熵范围。
答案 3 :(得分:2)
Shannon熵H(P)是随机变量X的概率分布P的性质。
在字符串的情况下,处理它的基本方法就像一个字符包。在这种情况下,频率计数提供了字符串中随机选择字符的概率分布P的近似值。
如果我们只是计算字符串中唯一字符的数量,这将与该字符串中出现的唯一字符数量的均匀分布的熵相关联。并且唯一字符的数量越多,熵就越大。
然而,Jeff Atwood(和BlueRaja的)后续代码贡献是更好的衡量标准,因为它们考虑了字符串的其他可能的分布;仍然被认为是一袋(不一定是唯一的)角色;表示。
在Rex M的答案基础上......寻找“字符熵”超出1.0-1.5范围的字符串更有意义,尽可能“低质量字符串”。
答案 4 :(得分:0)
对于您的问题不完全是答案,但维基百科有this explanation of Entropy:
熵是一种无序的衡量标准,或更确切地说是不可预测性。 例如,一系列带有公平硬币的硬币投掷具有最大熵, 因为没有办法预测接下来会发生什么。一串硬币 带有双头硬币的投掷零熵,因为硬币总是如此 上来了。现实世界中的大多数数据集都存在于某个地方 介于两者之间。
英文文本的熵相当低。换句话说,它是相当可预测的。 即使我们不确切知道接下来会发生什么,我们也可以公平 例如,肯定会有比z更多的e或者更多的e 组合'qu'将比任何其他组合更常见 其中带有'q','th'组合将比任何组合更常见 他们未压缩的英文文本大约有一位熵 消息的每个字节(8位)。