Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
Python 2.7 Python:根据每个字母';什么频率?_Python 2.7 - Fatal编程技术网

Python 2.7 Python:根据每个字母';什么频率?

Python 2.7 Python:根据每个字母';什么频率?,python-2.7,Python 2.7,我正在用Python2编写一个函数,它根据字符串的字母频率返回字符串的语言 我正在使用维基百科中名为“其他语言字母的相对频率”的表格。() 我已经确定了给定文本中每个字母的频率,这是一个字典的形式,其中值表示(键的出现次数/字母总数) 我还把这张桌子变成了一本词典 {'a': {'English': 0.08167, 'French': 0.07363, ...}, 'b': {'English': 0.01492, 'French': 0.0901, ...}, ...} 比较这些值以根据频

我正在用Python2编写一个函数,它根据字符串的字母频率返回字符串的语言

我正在使用维基百科中名为“其他语言字母的相对频率”的表格。()

我已经确定了给定文本中每个字母的频率,这是一个字典的形式,其中值表示(键的出现次数/字母总数)

我还把这张桌子变成了一本词典

{'a': {'English': 0.08167, 'French': 0.07363, ...}, 'b': {'English': 0.01492, 'French': 0.0901, ...}, ...}
比较这些值以根据频率确定语言的一些好方法是什么

已解决-以下是更新的代码:

# freq_reference is a dictionary with structure {'English': {'a': freq, 'b': freq, ...}, 'French': {'a': freq, 'b': freq, ...}}
# freq is a dictionary with key = letter, and value = frequency of the letter that appears in the input text

# Manhattan
dis_man = {}
for lang in freq_reference:
    dis_man[lang] = 0.0
    for key in freq_reference[lang]:
        dis_man[lang] += abs(freq_reference[lang][key] - freq[key])

# Euclidean
dis_euc = {}
for lang in freq_reference:
    sum = 0.0
    for key in freq_reference[lang]:
        sum += (freq_reference[lang][key] - freq[key])**2
    dis_euc[lang] = sum**(1/2.0)

# find the lang with minimum Manhattan dis
min_man = 100
for lang in dis_man:
    if dis_man[lang] < min_man:
        min_man = dis_man[lang]
        min_lang_man = lang

# find the lang with minimum Eucliedian dis
min_euc = 100
for lang in dis_euc:
    if dis_euc[lang] < min_euc:
        min_euc = dis_euc[lang]
        min_lang_euc = lang
#freq_reference是一本结构为{'English':{'a':freq,'b':freq,},'French':{'a':freq,'b':freq,}的词典
#freq是一个字典,键=字母,值=输入文本中出现字母的频率
#曼哈顿
dis_man={}
对于频率参考中的语言:
dis_man[lang]=0.0
对于输入频率参考[lang]:
dis_man[lang]+=abs(频率参考[lang][key]-freq[key])
#欧几里得
dis_euc={}
对于频率参考中的语言:
总和=0.0
对于输入频率参考[lang]:
总和+=(频率参考[lang][key]-freq[key])**2
dis_euc[lang]=总和**(1/2.0)
#找到具有最小曼哈顿dis的lang
min_man=100
对于迪斯曼的朗:
如果有人[郎]<民民民:
min_man=dis_man[lang]
min_lang_man=lang
#找到具有最小欧几里得分布的朗
最小euc=100
对于dis_euc中的lang:
如果dis_euc[lang]
我认为一本结构为
{'English':{'a':…,'b':…,…},'French':{…},}
的词典更有意义,原因有二:

  • 对于示例文本,您可以立即获得与频率词典结构完全相同的词典

  • 每种语言可以有不同的字符集


  • 一旦你这样做了,一个好的开始就是计算你的样本频率和每种语言的频率之间的“距离”。有几个“距离”度量,包括曼哈顿距离和欧几里得距离。尝试以下几种方法可以获得多个测量“亲密度”的数据点。

    谢谢!我把字典改成了你建议的结构,当我计算曼哈顿和欧几里得距离时,它就成功了!
    # freq_reference is a dictionary with structure {'English': {'a': freq, 'b': freq, ...}, 'French': {'a': freq, 'b': freq, ...}}
    # freq is a dictionary with key = letter, and value = frequency of the letter that appears in the input text
    
    # Manhattan
    dis_man = {}
    for lang in freq_reference:
        dis_man[lang] = 0.0
        for key in freq_reference[lang]:
            dis_man[lang] += abs(freq_reference[lang][key] - freq[key])
    
    # Euclidean
    dis_euc = {}
    for lang in freq_reference:
        sum = 0.0
        for key in freq_reference[lang]:
            sum += (freq_reference[lang][key] - freq[key])**2
        dis_euc[lang] = sum**(1/2.0)
    
    # find the lang with minimum Manhattan dis
    min_man = 100
    for lang in dis_man:
        if dis_man[lang] < min_man:
            min_man = dis_man[lang]
            min_lang_man = lang
    
    # find the lang with minimum Eucliedian dis
    min_euc = 100
    for lang in dis_euc:
        if dis_euc[lang] < min_euc:
            min_euc = dis_euc[lang]
            min_lang_euc = lang