单词示例:

  • 百科全书
  • 表格

  • 随机字符串的示例:
  • qxbogsac
  • jgaynj
  • rnnfdwpm

  • 当然,随机字符串实际上可能是某种语言中的单词,或者看起来像一个单词。但是基本上,一个人能够说出某种看起来“随机”的东西,基本上只是通过检查您是否能够说出它来。

    我试图通过计算熵来区分这两者,但这远非完美。您还有其他想法,可行的算法吗?

    但是有一个重要的要求,我不能使用像nltk这样的重量级库或使用字典。基本上,我需要的是一些在大多数情况下都可以使用的简单快速的启发式方法。

    最佳答案

    我开发了一个名为Nostril的Python 3程序包,用于解决与OP要求密切相关的问题:确定在源代码挖掘期间提取的文本字符串是否为class/function/variable/etc。标识符或乱码。它不使用字典,但确实包含一个相当大的n-gram频率表,以支持其对文本字符串的概率评估。 (我不确定这是否符合“词典”的要求。)该方法不检查发音,并且其专业性可能使其不适合一般的单词/非单词检测。但是,对于OP或寻求解决类似问题的其他人来说,这可能会很有用。

    例子:下面的代码,

    from nostril import nonsense
    real_test = ['bunchofwords', 'getint', 'xywinlist', 'ioFlXFndrInfo',
                 'DMEcalPreshowerDigis', 'httpredaksikatakamiwordpresscom']
    junk_test = ['faiwtlwexu', 'asfgtqwafazfyiur', 'zxcvbnmlkjhgfdsaqwerty']
    for s in real_test + junk_test:
        print('{}: {}'.format(s, 'nonsense' if nonsense(s) else 'real'))
    

    将产生以下输出:
    bunchofwords: real
    getint: real
    xywinlist: real
    ioFlXFndrInfo: real
    DMEcalPreshowerDigis: real
    httpredaksikatakamiwordpresscom: real
    faiwtlwexu: nonsense
    asfgtqwafazfyiur: nonsense
    zxcvbnmlkjhgfdsaqwerty: nonsense
    

    关于python - 在python中,如何区分人类可读的单词和随机字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18717536/

    10-10 00:58
    查看更多