【问题标题】:Is it possible to check if a short sequence of text is random or not?是否可以检查一小段文本是否是随机的?
【发布时间】:2013-06-11 10:52:59
【问题描述】:

是否可以检查一个短的文本序列,例如两三个字,是随机的还是不随机的? 我的第一个想法是计算字符串的熵。

H("hello world") = 2.84535
H("sdzfjksher") = 3.12193

但是"hello world" 中字符的任何组合都会产生相同的熵,但会创建一个像"llloo ehrdw" 这样的随机字符串。基于熵的方法在文本等长字符串上效果很好。在这里,您还可以计算单个字符来确定它是一种语言。您还可以在此处使用 Zipfs Law 来检查真实语言...

下一个方法是常用词的查找表,就像普通的英语词典一样。这种方法的问题是先创建一个单词列表。

例如:

input string        result
------------------------------------------------------
"hello world"       matches 2 words
"helloworld"        random string
"lllooehrdw"        random string
"hello.world"       probably 2 words 
"a.be.was"          probably 3 words (but this is probably a strange edge case)

因此,只需在此处查找单词以将它们与您的单词表进行比较,这真的很难。

所有这些方法的另一个问题可能是,它们只能检测某些语言或需要针对某种语言进行训练。考虑到我们现在只想使用英语。

那么有什么好的方法可以做到这一点,还是我需要接受误报和误报?

【问题讨论】:

  • 恐怕这是 AI 完备的。
  • (如果没有,至少需要一个包含所有常用英语单词的整个数据库。)
  • 是的,当然,还可以看到最后一个字符串,它可能是随机的,但也包含三个单词......
  • 但是语言中一定有任何不是随机的特征吗?喜欢使用不常见的字符。所以如果我有一个单词“zzyycxyx”,这可能是随机的,因为它包含很多 z、x、y 并且其中没有人声..
  • 您要解决的原始问题是什么?也许有一种解决方法或以更简单的方式解决原始问题的方法?例如,尝试检测在表单中输入无意义数据的人。

标签: algorithm entropy text-analysis


【解决方案1】:

您可以计算文本中使用字符的频率,并将其与英语和/或其他语言的已知字符分布进行比较。这将指示文本是否/类似于该语言的概率。

【讨论】:

  • 更好的是,使用字母对的频率。如果您使用 26 个字母,则只需考虑 26x25/2 对。您可以从大量文本(或字典)中轻松生成字母对频率。我将有 27 个字符 - a..z 加上一个通用的单词分隔符;这还会检查单词中第一个和最后一个字符的频率。
  • 对于非常短的文本,对的数量可能太少而没有意义。另外我不明白为什么你只计算组合而不是所有可能的两个字母对 (26^2)。
【解决方案2】:

听起来您想使用字母的频率来查看字符串是单词还是随机字母。 http://scottbryce.com/cryptograms/stats.htm

结合统计数据和词汇表听起来像是减少误报的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多