比较有意义英文文本和随机字母串的平均符号熵

平均符号熵按照以下方法计算:选取m(m=1,2,3…)个字母作为一组,可顺序选取也可随机选取,统计字母组的频率并计算概率,将每个字母组当做一个消息按照熵的公式计算字母组的熵Hm,然后输出 Hm/m

代码:

import math
import re
import random
f = open("shakespeare.txt", "r")  # 设置文件对象
english_str = f.read()    # 将txt文件的所有内容读入到字符串str中
f.close()  # 将文件关闭
english_str = re.sub('[\W\d+]', ' ', english_str).replace(' ', '').upper()  # 去掉特殊字符、数字、空格,小写转大写
ran_str = ''.join(random.choices([chr(i) for i in range(65, 91)], k=len(english_str)))  # 生成相同长度的随机字符串
print("*****平均符号熵*****")def entropy(str, m):length = len(str)print("总长度为:", length)parts = re.findall(r'.{%s}' % m, str)  # 每m个一组print(m, "个为一组,共", len(parts), "组")parts_dict = {}for each_part in parts:parts_dict[each_part] = parts_dict.get(each_part, 0)+1# print(parts_dict)Hm = 0for i in parts_dict:p = parts_dict[i]/len(parts)# print(p)Hm += (-1)*p*math.log(p, 2)print("平均符号熵:", Hm/m)for i in range(10):print("\n有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt")entropy(english_str, i+1)print("\n随机字母串")entropy(ran_str, i+1)

运行结果:

/usr/local/bin/python3.7 /Users/kevinluo/PycharmProjects/Python3.7/平均符号熵.py
*****平均符号熵*****有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
1 个为一组,共 851078 组
平均符号熵: 4.194496631708819随机字母串
总长度为: 851078
1 个为一组,共 851078 组
平均符号熵: 4.700427655805006有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
2 个为一组,共 425539 组
平均符号熵: 3.9213390549986182随机字母串
总长度为: 851078
2 个为一组,共 425539 组
平均符号熵: 4.699865176410518有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
3 个为一组,共 283692 组
平均符号熵: 3.6764782750801595随机字母串
总长度为: 851078
3 个为一组,共 283692 组
平均符号熵: 4.685378356414472有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
4 个为一组,共 212769 组
平均符号熵: 3.3924260303397085随机字母串
总长度为: 851078
4 个为一组,共 212769 组
平均符号熵: 4.3184954166478695有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
5 个为一组,共 170215 组
平均符号熵: 3.045558179829111随机字母串
总长度为: 851078
5 个为一组,共 170215 组
平均符号熵: 3.4725433200922757有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
6 个为一组,共 141846 组
平均符号熵: 2.678702080333972随机字母串
总长度为: 851078
6 个为一组,共 141846 组
平均符号熵: 2.8522501081457965有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
7 个为一组,共 121582 组
平均符号熵: 2.341412761154158随机字母串
总长度为: 851078
7 个为一组,共 121582 组
平均符号熵: 2.41308144723054有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
8 个为一组,共 106384 组
平均符号熵: 2.0566676277744897随机字母串
总长度为: 851078
8 个为一组,共 106384 组
平均符号熵: 2.0873652077963123有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
9 个为一组,共 94564 组
平均符号熵: 1.8224437146966588随机字母串
总长度为: 851078
9 个为一组,共 94564 组
平均符号熵: 1.8365559379437697有意义英文文本:莎士比亚著作文本 https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt
总长度为: 851078
10 个为一组,共 85107 组
平均符号熵: 1.630936664819511随机字母串
总长度为: 851078
10 个为一组,共 85107 组
平均符号熵: 1.6376990177124715Process finished with exit code 0

结论:

  • 有意义英文文本的平均符号熵小于随机字母串的平均符号熵

  • 随着每组字符数的增多,平均符号熵下降

比较有意义英文文本和随机字母串的平均符号熵相关推荐

  1. matlab英文文本信息量,实验一英文文本信息量的计算-Read.doc

    实验一英文文本信息量的计算-Read 实验一 英文文本信息量的计算 一 实验目的 1 通过本实验熟悉Matlab软件编程环境 2 编写M文件实现对英文文本信息量的计算,掌握信源熵的计算方法 二 实验要 ...

  2. Python实现英文文本的霍夫曼编码压缩

    霍夫曼编码作为变长码,在已知字符出现的频率的前提下,将频率高的字符用短码表示,频率低的字符用长码表示,实现用最短的码符号完整的表示出一段文本的信息. 例如 对于 这样一文本,进行字符频率统计,部分结果 ...

  3. 【英文文本分类实战】之四——词典提取与词向量提取

    ·请参考本系列目录:[英文文本分类实战]之一--实战项目总览 ·下载本实战项目资源:神经网络实现英文文本分类.zip(pytorch) [1] 提取词典   在这一步,我们需要把训练集train.cs ...

  4. 【英文文本分类实战】之二——数据集挑选与划分

    ·请参考本系列目录:[英文文本分类实战]之一--实战项目总览 ·下载本实战项目资源:神经网络实现英文文本分类.zip(pytorch) [1] 数据集平台   在阅读了大量的论文之后,由于每一篇论文都 ...

  5. 英文文本分类——电影评论情感判别

    目录 1.导入所需的库 2.用Pandas读入训练数据 3.构建停用词列表数据 4.对数据做预处理 5.将清洗的数据添加到DataFrame里 6.计算训练集中每条评论数据的向量 7.构建随机森林分类 ...

  6. 英文文本分类实战总结

    之前参加了一个英文文本的分类比赛.比赛结束到了过年,加上开学又有一些事情,所以总结的工作就一直没有进行.现在空了一些,所以把之前的工作写一写,比赛中用到的代码也会放到github上. 对这个比赛的任务 ...

  7. python 英语分词_基于Python NLTK库进行英文文本预处理

    文本预处理是要文本处理成计算机能识别的格式,是文本分类.文本可视化.文本分析等研究的重要步骤.具体流程包括文本分词.去除停用词.词干抽取(词形还原).文本向量表征.特征选择等步骤,以消除脏数据对挖掘分 ...

  8. 凯撒密码的自动化破解方法(适用于英文文本)

    凯撒密码的自动化破解方法(适用于英文文本) 凯撒密码 凯撒加密是有记载的最古老的加密方法.原始的凯撒密码没有密钥,加密方式很原始,就是通过将字母表循环右移三位进行加密:a被D替代,b被E替代,-,x被 ...

  9. 【项目】C语言实现对英文文本按字典顺序排序(1~100万+个单词,多种排序算法选择)

    目录 介绍 算法代码与exe程序 基本功能 完整功能 函数总览 运行实例(10万个单词的英文文本排序) 参考文献 介绍 对含有多个单词的英文文本,选择多个排序算法,将所有单词按字典顺序排序,并实时显示 ...

最新文章

  1. Android问题汇总
  2. 数据科学工具 Jupyter Notebook 教程(一)
  3. 变量与字符串的连接 - format、格式化字符串
  4. IOS开发笔记 - 基于SDWebImage的网络图片加载处理
  5. 如果某一运行的服务在/var/lock/subsys
  6. css实现元素居中的常见方法
  7. web项目jsp中无法引入js问题
  8. STM32F7xx —— 内部flash
  9. 【Git】码云Gitee.com管理项目全流程
  10. 基于Jekyll的博客模板
  11. minigui大号字体的实现,即ttf库的使用【转】
  12. 1 Oracle数据库常用命令
  13. 使用jfreechart在jsp页面柱状图统计
  14. 导数/微分/积分的区别
  15. 省会、自治区、直辖市、特别行政区
  16. 教程:Nodejs大漠插件开发游戏脚本实战(三)注册大漠插件
  17. 专题一:Labview表格控件 及 应用(三)在表格中插入一行数据
  18. excel的IRR函数中的预估值有什么用
  19. MT6765 datasheet手册,MT6765参考设计,MT6765芯片资料
  20. PICT测试工具的安装及使用

热门文章

  1. 600分理科选计算机专业,女孩子理科成绩600分左右,但是性格内向,可以选择什么专业呢?...
  2. 在 Visual Studio Code 里让左边文件浏览器里的图标更加美化
  3. 开启混合睡眠 解决Hybrid Sleep The hypervisor does not support this standby statewindows
  4. centos7 硬盘性能测试
  5. 安卓 WebView 白屏(记录)
  6. Python爬取动态加载的壁纸网站(高清壁纸福利)
  7. Python定时任务神器 - APScheduler
  8. 淘宝网UED官方博客
  9. 用cryptload批量下载Rapidshare文件
  10. 【busybox】busybox使用总结 -01