如何确定文件名是否随机?

时间:2015-09-03 22:56:46

标签: c# python algorithm random

我需要能够测试文本列表中看似随机的文件名;

  

e.g。 aggvvcx.com或kbzaandc.exe

有没有合理/合理的方法来做到这一点?我唯一的想法就是检查元音的出现与辅音的比例,但这似乎并不可靠,也没有使用字典。

编辑:随机性的定义

我对随机性的唯一信息是它是一个文件名。也许有可能获得一个常见文件名字典并使用某种模式解析器来确定常见的文件命名模式并在训练后对列表运行吗?如果我们考虑使用多种语言,这显然是徒劳的,但我只对检查英文文件名感兴趣。

5 个答案:

答案 0 :(得分:1)

你的意思是什么?有很多方法可以回答这个问题。

从技术上讲,使用information theory methods可能是“它们包含多少熵”。

既然你提到字典,你实际上可能意味着“它们看起来像真正的单词吗?”这可以使用字母分布检查长文本,但对于您显示的短名称将失败。相反,您可以尝试使用n-grams字符。这类似于字母频率,但是对于2/3字母序列。这意味着如果你试试bigrams,你会发现第一个单词包含“gv”,“vv”,“vc”,“cx”,这些单词很可能在任何英文单词中找不到。

还有其他方法可以回答这个问题,因此在这种情况下你必须弄清楚“随机”对你意味着什么。

答案 1 :(得分:1)

你可以尝试

  1. https://github.com/rrenaud/Gibberish-Detector

  2. 更长的字符串使用zlib进行gzip压缩,其中压缩越大表示随机性越小

  3. 字符串中字符的频率分析与适当自然语言的平均值的比较

  4. Google搜索假设随机字符串的匹配次数可能会少得多

  5. soundex判断该字符串是否至少有一个音节,因此更可能是可发音的,因此不太可能是随机的

  6. 带有朴素贝叶斯分析的n-gram(http://theory.stanford.edu/~dfreeman/papers/namespam.pdf

  7. 训练神经网络,与垃圾邮件过滤类似,

  8. 基于Netflix挑战赛获胜者的方法,结合上述所有方法获得最佳结果,即相对平庸的测试组合可以产生更好的测试结果。

答案 2 :(得分:0)

有很多随机性测试,因此为您解决的问题是决定随机性的含义。我担心做出这个决定是一个非平凡的问题。但维基百科页面是一个很好的起点。

https://en.wikipedia.org/wiki/Randomness_tests

好消息是,如果你只需要它就会变得非常混乱"那么你可以采取一些合理的(即计算上便宜且通常足够好)的方法。

答案 3 :(得分:0)

一个半粗略和快速的启发式检查将是按字母对字符串进行排序,并将其排序的序列与为该长度随机生成该序列的可能性进行比较。即,对于字长2,给出26个字母的字母表中的(分类的)字符串“AA”有1 /(26 * 26)的机会,但是(分类的)字符串“AB” - 由“AB”生成并且“BA” - 有机会2 /(26 * 26)。

P.S。从编程的角度来看,另一种方法是对它运行一个拼写检查,并弄清楚有多少“错误”。然后对它设置一个阈值。

答案 4 :(得分:0)

我必须为源代码挖掘项目解决一个密切相关的问题并开发Nostril(对于"无意义字符串求值器")。这个Python 3包旨在确定在源代码挖掘期间提取的字符串是否可能是类/函数/变量/等。标识符或随机乱码。它也适用于真实文本,而不仅仅是程序标识符。 Nostril使用n-gram(类似于Gibberish Detector by Rob Neuhaus)和自定义TF-IDF评分函数。它是预先训练好的,随时可以使用。

示例:以下代码

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

该项目在GitHub,我欢迎贡献。