-- coding: utf-8 --

""" 计算中英文的零阶信源熵 """ import math

英文字母概率表

eng_prob = {'A': 0.08167, 'B': 0.01492, 'C': 0.02782, 'D': 0.04253, 'E': 0.12702, 'F': 0.02228, 'G': 0.02015, 'H': 0.06094, 'I': 0.06966, 'J': 0.00153, 'K': 0.00772, 'L': 0.04025, 'M': 0.02406, 'N': 0.06749, 'O': 0.07507, 'P': 0.01929, 'Q': 0.00095, 'R': 0.05987, 'S': 0.06327, 'T': 0.09056, 'U': 0.02758, 'V': 0.00978, 'W': 0.02360, 'X': 0.00150, 'Y': 0.01974, 'Z': 0.00074}

汉字概率表(近似)

chi_prob = {'的': 0.0558, '一': 0.0404, '是': 0.0376, '不': 0.0288, '了': 0.0253, '在': 0.0239, '人': 0.0198, '有': 0.0187, '我': 0.0176, '他': 0.0168, '这': 0.0162, '个': 0.0151, '们': 0.0146, '中': 0.0143, '来': 0.0136, '上': 0.0125, '大': 0.0117, '为': 0.0114, '和': 0.0108, '国': 0.0107, '地': 0.0102, '到': 0.0097, '以': 0.0089, '说': 0.0086, '时': 0.0085, '要': 0.0078, '就': 0.0075, '出': 0.0071, '会': 0.0070, '可': 0.0068, '也': 0.0068, '你': 0.0068, '对': 0.0067, '生': 0.0066, '能': 0.0065, '而': 0.0063, '子': 0.0063, '那': 0.0061, '得': 0.0061, '于': 0.0060, '着': 0.0059, '下': 0.0058, '自': 0.0058, '之': 0.0054, '年': 0.0053, '过': 0.0053, '发': 0.0051, '后': 0.0051, '作': 0.0049}

def calc_entropy(prob_dict): """ 计算信源熵 :param prob_dict: 字典,键为符号,值为该符号出现的概率 :return: 信源熵 """ entropy = 0.0 for prob in prob_dict.values(): entropy -= prob * math.log(prob, 2) return entropy

if name == 'main': eng_entropy = calc_entropy(eng_prob) chi_entropy = calc_entropy(chi_prob) print("英文零阶信源熵:%.4f" % eng_entropy) print("汉语零阶信源熵:%.4f" % chi_entropy) print("中文的信源熵相对于英文的信源熵更小,说明中文的信息量更集中,表达同样的意思所需要的信息量更少。"

信息熵的计算方法需要自行编码实现不能直接调用第三方软件包。可复用前几次实验编写的相应函数;代码中需包含适量注释说明求解思路和过程。参考课本P67的英文字母概率表表31P68的汉字近似概率表表32计算并比较英文和中文的零阶信源熵。要求:1 零阶近似:对马尔科夫信源为了简化计算本实验只考虑文中各字母或中文汉字出现的概率不考虑字母之间的依赖关系。2 估算英文信源的零阶熵3 估算汉语信源的零阶熵4 比较中

原文地址: https://www.cveoy.top/t/topic/g6e1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录