Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定文件名是否是随机的?_C#_Python_Algorithm_Random - Fatal编程技术网

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

C# 如何确定文件名是否是随机的?,c#,python,algorithm,random,C#,Python,Algorithm,Random,我需要能够测试一个文本列表的文件名,似乎随机 e、 g.aggvvcx.com或kbzaandc.exe 有什么合理/合理的方法可以做到这一点吗?我唯一的想法是检查元音和辅音的出现率,但这似乎不可靠,使用字典也不可靠 编辑:随机性的定义 关于随机性的性质,我所掌握的唯一信息是它是一个文件名。也许有可能得到一个通用文件名的字典,并使用某种模式解析器来确定通用文件命名模式,并在培训后对照列表运行它?如果我们考虑使用多种语言,这显然是一种徒劳的方法,但我只对检查英文文件名感兴趣。有很多随机性测试,因此

我需要能够测试一个文本列表的文件名,似乎随机

e、 g.aggvvcx.com或kbzaandc.exe

有什么合理/合理的方法可以做到这一点吗?我唯一的想法是检查元音和辅音的出现率,但这似乎不可靠,使用字典也不可靠

编辑:随机性的定义
关于随机性的性质,我所掌握的唯一信息是它是一个文件名。也许有可能得到一个通用文件名的字典,并使用某种模式解析器来确定通用文件命名模式,并在培训后对照列表运行它?如果我们考虑使用多种语言,这显然是一种徒劳的方法,但我只对检查英文文件名感兴趣。

有很多随机性测试,因此为您发布的第一个测试将决定随机性的含义。恐怕做那个决定不是件小事。但是维基百科页面是一个很好的起点


好消息是,如果你只是想让它变得“相当混乱”,那么你可以采取一些合理的方法(即,计算成本低,而且通常足够好)。

你所说的随机到底是什么意思?有很多方法可以回答这个问题

从技术上讲,这可能是“它们包含了多少熵”使用

既然你提到了字典,你的意思可能是“它们看起来像真单词吗?”这可以通过字母分布来检查长文本,但对于你显示的短名称,这将失败。相反,你可以尝试角色。这与字母频率相似,但适用于2/3字母序列。这意味着,如果你尝试使用bigrams,你会发现第一个单词包含“gv”、“vv”、“vc”、“cx”,这在任何英语单词中都是不可能找到的


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

一个半粗略和快速的启发式检查是按单个字母对字符串进行排序,并将其排序序列与随机生成该长度序列的可能性进行比较。i、 e.对于字长2,字母表中给定26个字母的(排序)字符串“AA”的概率为1/(26*26),但由“AB”和“BA”生成的(排序)字符串“AB”的概率为2/(26*26)

另外,从编程的角度来看,另一种方法是对其运行拼写检查,并找出有多少“错误”。然后对其设置一个阈值。

您可以尝试

  • 对于较长的字符串,使用zlib进行gzip压缩,其中较大的压缩表示较小的随机性

  • 对字符串中的字符进行频率分析,并与相应自然语言的平均值进行比较

  • 谷歌搜索假设随机字符串的点击率可能会显著降低

  • soundex用于确定字符串是否至少有一个音节,因此更容易发音,也不太可能是随机的

  • 具有朴素贝叶斯分析的n-grams()

  • 训练神经网络,使其与垃圾邮件过滤类似

  • 根据Netflix挑战的获胜者的方法,将上述所有测试结合起来,以获得最佳结果,即将相对平庸的测试结合起来,可能会产生更好的测试


  • 我必须为一个源代码挖掘项目解决一个密切相关的问题,并开发了(用于“无意义字符串计算器”)。这个Python3包旨在确定在源代码挖掘过程中提取的字符串可能是类/函数/变量/等等标识符还是随机乱码。它也适用于真实文本,而不仅仅是程序标识符。鼻孔使用n-grams(类似于)结合自定义评分功能。它经过预训练,可以开箱即用

    示例:下面的代码

    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
    

    该项目正在进行中,我欢迎您的贡献。

    我们无法为您定义“随机”的含义。一旦你自己弄明白了这一点,你就有了问题的答案。你必须提供一个更好的“似乎是随机的”定义,因为随机生成的字符串产生类似“myfile”的东西的几率与产生“qzzyei”的几率一样大。这是随机性。这可能很有用:。您可能希望尝试询问。鉴于.exe和.com部分,字典似乎是使用基于字符串的距离函数的最佳选择。除此之外,您还可以构建一个已知可执行文件的列表,并标记不属于该列表的任何内容。以下哪一项是随机的(无需谷歌搜索):
    nvvsvc.exe
    msseces.exe
    cvvil.exe
    。其中两个是windows打包的公共服务,一个是“随机”嗯,这是个好主意,但这在实践中真的适用吗?AZ的文件名看起来不像AA那么随机?太好了,非常感谢。显然,这与一个能很好地回答这个问题的答案有关。@ChibuezeOpata:是的,我看到了一个,还有其他几个,但不是全部都是这样。这是一个有趣的问题,由于国际化(字符串是随机的还是来自另一种语言)和名称空间拥挤(迫使人们将登录名的字符串随机化以获得一个位置),它变得越来越难解决。事实上,从任何时候起,人类都在为自己制造问题。用户名/昵称可能在50年后被弃用。