【问题标题】:Detecting random keyboard hits considering QWERTY keyboard layout考虑 QWERTY 键盘布局检测随机键盘点击
【发布时间】:2011-04-17 15:56:31
【问题描述】:

winner of a recent Wikipedia vandalism detection competition 建议可以通过“检测随机键盘击中考虑 QWERTY 来改进检测 键盘布局"。

例如:woijf qoeoifwjf oiiwjf oiwj pfowjfoiwjfo oiwjfoewoh

是否有任何软件已经这样做了(最好是free and open source)?

如果没有,是否有一个活跃的 FOSS 项目,其目标是实现这一目标?

如果不是,你会建议如何实现这样的软件?

【问题讨论】:

  • 故意破坏检测算法已经包括基于字典/语法的检测,所以我在这里寻找一种不使用字典或语法,而是使用手指模式的算法。
  • “手指模式”与字典条目和语法规则有何不同?是同一种方法,区别是一种是正检测,另一种是负检测。此外 - 不清楚你要什么 - 考虑到 qwerty 的随机键盘点击与考虑 dvorak 的随机键盘点击没有什么不同,除非它们不是真正随机的(也许更好地称之为“常用的破坏行为构造”)。
  • @Unreason:关于你的第一个问题:我指的是现有人类语言的字典和语法。您提出的“否定检测”很有趣,请随意提出它作为答案。关于“Furthermore”:我重新提出我的问题:给定一个在 QWERTY 键盘上输入的字符序列,如何计算不小心输入的概率? (即:目标不是表达某事而是快速输入许多字符的人,例如oiuroiqewrcoqf)

标签: algorithm n-gram qwerty text-classification


【解决方案1】:

采用基于键盘布局的方法将提供一个很好的指标。使用 QWERTY 布局,您会发现任何给定文本中大约 52% 的字母来自键盘字符的顶行。大约 32% 的字符来自中间线,14% 的字符来自底线。虽然这从一种语言到另一种语言略有不同,但仍然存在可以检测到的非常清晰的模式。使用相同的方法来发现其他键盘布局中的模式,然后确保在检查乱码之前检测用于输入的任何文本的布局。尽管模式很清楚,但最好将此方法用作一个指标,前提是该方法最适用于较长的脚本。使用其他指标,例如与字母/数字混合的非字母/数字字符、文本长度等,将提供进一步的指标,在​​应用加权时,可以很好地总体指示乱码输入。

【讨论】:

    【解决方案2】:

    Fredley 的答案可以扩展为从附近字母构造单词的语法。

    例如,asasasasasdf 可以使用连接 assasddf 的语法生成。

    使用这种语法,扩展到键盘上的所有字母(字母彼此相邻),在解析后,您可以衡量使用这种“乱码”语法可以生成多少文本。

    警告:当然,任何讨论此类语法并列出“乱码”文本示例的文本的得分都会明显高于经过拼写检查的常规文本。

    请注意,示例方法不会捕获“h4x0r rulezzzzz!!!!!”形式的破坏行为。

    这里的另一种方法(可以与上述方法集成)是对被破坏文本的语料库进行统计分析,并尝试获取被破坏文本中的常用词。

    编辑:
    既然你假设 QWERTY,我想我们也可以假设英语?

    KISS 怎么样 - 通过英语拼写检查器运行文本,如果它失败并得出结论认为它可能是胡言乱语(问题是,为什么要区分快速输入的胡言乱语和随机的废话,或者就此而言与拼写非常糟糕的文本? )

    或者,如果要考虑其他键盘布局(Dvorak,有人吗?)和语言,则可以通过所有可用的语言拼写检查器运行文本,然后继续(这也会自动检测语言)。

    这不是很有效的方法,但可以用作基线测试。

    注意:
    从长远来看,我认为破坏者会适应并开始破坏,例如来自其他维基百科页面的摘录,最终很难自动检测为破坏行为(好的,现有文本可以校验和并在重复项上引发标记,但如果文本来自其他来源,最终会很难)。

    【讨论】:

    • 关于您的“注意”段落:确实,'h4x0r rulezzzzz!!!!!'案例在这里不针对,实际上是通过其他方式处理的,获胜者的论文谈到了这一点。简而言之:“zzzzz”的字符重复和过多的标点符号已经将其标记为可能的故意破坏行为。
    【解决方案3】:

    考虑两个字母序列的经验分布,即“给定字母 a 跟随字母 b 的概率”,所有这些概率都填满了 27x27 大小的表格(将空格视为字母)。

    现在,将其与一堆英语/法语/任何文本的历史数据进行比较。使用 Kullback 散度进行比较。

    【讨论】:

    • 我是否正确,要实施您的解决方案,我需要一个“混合文本”语料库?
    • 您需要标准英文文本的语料库(如维基百科文章)。
    • 我认为只考虑文章的最后一个版本(除非它真的很短)可能适用于 Wikipedia 示例。
    【解决方案4】:

    如果分析文本中的两个bigrams 在 QWERTY 术语中很接近,但在英语中的统计频率接近零(例如对“fg”或“cd”),则可能涉及随机键盘敲击。如果找到更多这样的对,那么机会就会大大增加。

    如果您想考虑使用双手进行抨击,那么测试与另一个字母分隔的字母以 QWERTY 接近度,但测试两个二元组(甚至三元组)以表示二元组频率。例如,在文本“flsjf”中,您将检查 F 和 S 的 QWERTY 距离,但检查双字母 FL 和 LS(或三字母 FLS)的频率。

    【讨论】:

    • +1 这听起来不错,但首先需要提取这些用于乱码的常见二元组列表;否则最终结果将基于猜测(猜测哪些二元组或三元组是乱码的特征)。
    • 也许对于 OP 来说,需要说明二元匹配是拼写检查器中的常用算法
    • 接受。作为参考,我想补充一点,一个不寻常的二元组的重复是一个准确定的符号。
    • 所以回到 Nicolas 的问题:有没有实现这种逻辑的开源库?
    • @TheArchitect 回答这个问题我并不比谷歌聪明
    【解决方案5】:

    根据我的经验,大多数键盘混搭往往都在首页。检查是否大部分使用的字符是asdfjkl; 是相当简单的。

    【讨论】:

    • 哇,我从来没有注意到这一点,但我的随机捣碎确实如此!
    猜你喜欢
    • 2020-07-29
    • 2011-02-28
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多