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