杰夫阿特伍德最近发布了一个CodeReview帖子的链接,他想知道社区是否可以改进他的“calculating entropy of a string”代码片段 . 他解释说,"We're calculating entropy of a string a few places in Stack Overflow as a signifier of low quality."
他的方法的要点似乎是,如果计算字符串中唯一字符的数量,则表示熵(代码取自PieterG's answer):
int uniqueCharacterCount = string.Distinct().Count();
我不明白唯一字符数如何表示字符串的熵,以及字符串的熵如何表示低质量 . 我想知道在这方面有更多知识的人是否可以解释阿特伍德先生想要完成的事情 .
谢谢!
5 回答
字符串'aaaaaaaaaaaaaaaaaaaaaaaaaa'具有非常低的熵,并且相当无意义 .
字符串'blah blah blah blah blah blah blah blah'具有更高的熵,但仍然相当愚蠢,可以a part of an attack .
具有与这些字符串相当的熵的帖子或评论可能不合适;它不能包含任何有意义的消息,甚至是垃圾链接 . 这样的帖子可以被过滤掉或保证额外的验证码 .
混淆似乎来自于这被用来阻止发布帖子的想法 - 事实并非如此 .
它只是用于查找可能的低质量帖子的几种算法之一,显示在主持人工具的low quality posts tab(需要10k代表)上 . 实际人类仍然需要查看帖子 .
想法是 grab 像
~~~~~~No.~~~~~~
或FUUUUUUUU------
这样的帖子,而不是 grab 所有低质量的帖子 .至于"How does the unique character-count signify entropy?" - 它确实没有 . 最受欢迎的答案完全忽略了这一点 .
见https://codereview.stackexchange.com/questions/868#878和https://codereview.stackexchange.com/questions/868#926
让我们看看 Entropy (information theory) 上的维基百科条目:
特别是英文信息:
换句话说,不仅仅是低熵是坏的,高熵是好的,反之亦然 - 有一个 optimal entropy range .
香农熵H(P)是随机变量X的概率分布P的性质 .
在字符串的情况下,处理它的基本方法就像一个字符包 . 在这种情况下,频率计数提供字符串中随机选择的字符的概率分布P的近似值 .
如果我们只是简单地计算字符串中唯一字符的数量,这将与该字符串中出现的唯一字符数量的均匀分布的熵相关联 . 并且唯一字符的数量越多,熵就越大 .
但是,Jeff Atwood(以及BlueRaja的)后续代码贡献是更好的度量,因为它们考虑了字符串的其他可能的分布;仍然被认为是一袋(不一定是唯一的)角色;代表 .
以Rex M的答案为基础......寻找“字符熵”超出1.0-1.5范围的字符串更有意义,尽可能“低质量的字符串” .
不完全是你的问题的答案,但维基百科有this explanation of Entropy: