基于中国大学mooc网嵩天老师的《Python语言程序设计》课程实例

文章目录

  • 一、数字文本 pi
  • 二、英文文本 *Hamlet*
  • 三、中文文本《三国演义》

一、数字文本 pi

问题描述:
统计并输出圆周率pi小数点后1000位中各数字出现频率并排序

完整代码:

txt = open('pi1000.txt', 'r').read()    # 获取文本文件
counts = {}    # 创建空字典for num in txt:if num == ' ':    # 排除数字文本中可能出现的空格continueelse:counts[num] = counts.get(num, 0) + 1  # 统计词频并在字典中创建键值对
items = list(counts.items())       # 将无序的字典类型转换为可排序的列表类型
items.sort(key=lambda x: x[1], reverse=True)   # 以元素的第二列进行从大到小排序for i in range(10):num, count = items[i]print("{:<5}:{:>5}".format(num, count))    # 格式化输出排序结果

结果展示:

二、英文文本 Hamlet

问题描述:
输出 Hamlet 中前10个高频词语及其次数

实例分析:
从思路上看,词频统计只是累加问题,即对每一个词设计一个计数器,词语每出现一次,相关计数器加1。使用字典类型能够很好地解决这个问题:以词语为键,计数器为值,构成 <单词>:<出现次数> 的键值对

  1. 第一步,是分解并提取英文文档中的单词。但是文本中存在噪音干扰:同一个英文单词存在大小写不同形式,而计数却不能区分大小写。因此,需要将大小写单词归一化。除此之外,文本中还有各种各样的标点符号及空格等特殊符号,在统计时需要删除并统一分隔方式。
  2. 第二步,是对每个单词进行计数。计数时要确保每个单词都能被精确计数,做到不遗漏不重复。
  3. 第三步,是对单词的统计值从高到低进行排序。由于字典类型没有顺序,需要将其转换为有顺序的列表类型。

具体步骤及代码分析:
首先下载保存文本,将内容保存在一个txt文档中。文本查看地址:Hamlet
注意:py文件应与文本文件位于统一路径下,否则打开文件时应指定具体路径。

完整代码:

# 首先定义一个函数,用于提取文档并处理噪音
def getText():txt = open("Hamlet.txt", 'r').read()txt = txt.lower()for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':txt = txt.replace(ch, ' ')  # 将文本中的特殊字符替换为空格return txthamletTxt = getText()
words = hamletTxt.split()  # 获得分割完成的单词列表
counts = {}  # 创建空字典,存放词频统计信息
for word in words:counts[word] = counts.get(word, 0) + 1    # 若字典中无当前词语则创建一个键值对,若有则将原有值加1
items = list(counts.items())  # 将无序的字典类型转换为有序的列表类型
items.sort(key=lambda x: x[1], reverse=True)  # 按统计值从高到低排序(以第二列排序)
for i in range(10):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))   # 格式化输出词频统计结果

重要代码片段:
(1)

for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':txt = txt.replace(ch, ' ')

此段代码用于将文本中所有可能出现的特殊字符替换为空格,从而排除噪音干扰,以便后续提取单词

(2)

for word in words:counts[word] = counts.get(word,0) + 1

此段代码用于统计各单词的出现频率,是以下代码的简洁表示:

if word in counts:counts[word] = counts[word] + 1
else:count[word] = 1

(3)

items = list (counts.items())
items.sort(key = lambda x:x[1],reverse = True)

此段代码用于将无序的字典转换为可以排序的列表,并根据第二列进行排序

结果展示:

三、中文文本《三国演义》

问题描述:
统计并输出《三国演义》中出场次数最多的前15位人物

实例分析:
《三国演义》中文分词,需要用到中文分词库 jieba 。除了基本的词频统计外,需要注意的是书中人物多具有别称和代称,如:诸葛亮,也可称为孔明、丞相等。因此在处理时需要将这些名称和代称都视为一种情况;同时也要排除一些常用的词语,如:将军、却说、二人、荆州、不可等。这些干扰词汇是多次经过词频统计程序运行后得到的。

具体步骤及代码分析:
首先下载保存文本文件。文本下载地址:《三国演义》

完整代码:

import jiebatxt = open("threekingdoms.txt", "r", encoding="utf-8").read()   # 以utf-8格式打开文件
excludes = {"将军", "却说", "二人", "不可", "荆州", "不能", "如此", "商议", "如何", "主公", "军士","左右", "军马", "引兵", "次日", "大喜", "天下", "东吴", "于是", "今日", "不敢", "魏兵","陛下", "一人", "都督", "人马", "不知", "汉中", "只见", "众将", "后主", "蜀兵", "上马",   # 列出干扰词汇库"大叫", "太守", "此人", "夫人", "先主", "后人", "背后", "城中", "天子", "一面", "何不","大军", "忽报", "先生", "百姓", "何故", "然后", "先锋", "不如", "赶来"}
words = jieba.lcut(txt)      # 得到中文分词列表
counts = {}                  # 创建一个空字典
for word in words:if len(word) == 1:continueelif word == "诸葛亮" or word == "孔明曰":         # 列举排除相同情况rword = "孔明"elif word == "玄德" or word == "玄德曰":rword = "刘备"elif word == "孟德" or word == "孟德曰" or word == "丞相":rword = "曹操"elif word == "关公" or word == "云长":rword = "关羽"elif word == "张翼德" or word == "翼德":rword = "张飞"else:rword = wordcounts[rword] = counts.get(rword, 0) + 1     # 若字典中没有则创建键值对,有则在原有值上加1
for word in excludes:del counts[word]                 # 删除非人名高频词
items = list(counts.items())         # 将无序的字典类型转换为可排序的列表类型
items.sort(key=lambda x: x[1], reverse=True)     # 以第二列值,从大到小进行排序
for i in range(15):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))     # 格式化输出前15个高频出现人物

结果展示:

Python实例分析——文本词频统计相关推荐

  1. Python—— 组合数据类型(模块5: jieba库的使用)(实例:基本统计值计算文本词频统计)

    前言 本篇主要介绍组合数据类型,以基本统计值计算为例,介绍函数使用和各种类型定义.以文本词频统计为例,介绍Jieba库的使用. (从本篇开始,出现的一些库中函数介绍以及部分简单代码都将以图片形式呈现) ...

  2. python词频统计西游记_实例10-文本词频统计.pdf

    Python语言程序设计 实例10: 文本词频统计 嵩 天 北京理工大学 "文本词频统计"问题分析 CC BY-NC-SA 4.0 嵩天 问题分析 文本词频统计 - 需求 :一篇文 ...

  3. Python_note6 组合数据类型+jieba库+文本词频统计

    集合类型和操作 集合元素不可修改,由不可变数据类型组成,元素不可重复 a = {"python",123,("python",123)}使用{}建立集合 b = ...

  4. Python实例10:文本词频统计

    Python实例10:文本词频统计 6.6.1 问题分析 在英文中文中,出现哪些词,出现多少次? 6.6.2 hamlet英文词频统计 CalHamletV1.py 6.6.3 三国演义人物出场统计 ...

  5. Python实例--文本词频统计

    最近在MOOC跟着北京理工大学的嵩天老师学习Python(https://www.icourse163.org/learn/BIT-268001?tid=1003243006#/learn/annou ...

  6. Python实现 文本词频统计(嵩天老师)

    实例10:文本词频统计 引用文本 英文文本:Hamet https://python123.io/resources/pye/hamlet.txt 中文文本:<三国演义> https:// ...

  7. python进行词频统计_如何利用Python进行文本词频统计

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 Python在自然语言处理这个方面,有其天然的优势: ...

  8. python统计词频 创建字典_如何利用Python进行文本词频统计

    问题描述 Python在自然语言处理这个方面,有其天然的优势:简单,快捷.所以我们经常会遇到利用Python从一篇文档中,统计文本词频的问题.以<三国演义>这部名著为例,文中哪些人物的出场 ...

  9. python哈姆雷特词频统计_python—文本词频统计 哈姆雷特 txt 下载

    原博文 2020-05-13 15:49 − 文本词频统计 -- Hamlet Hamlet下载 链接:https://pan.baidu.com/s/1Is2mBAED57i6nI38lcnXAA ...

最新文章

  1. catia怎么创建约束快捷键_答疑 | CATIA结构树无法显示怎么办?
  2. 数学故事中的「蛋」和「母鸡」
  3. 得到照片_大叔偷别人羞羞的照片画画,添油加醋后,却得到无数人点赞!
  4. 前端必备,Adobe Premiere Pro 常用快捷键
  5. Android UI开发第二十九篇——Android中五种常用的menu(菜单)
  6. 【收藏】ASP.NET英文技术文章推荐[10/28 – 11/3]
  7. 「leetcode」435. 无重叠区间【贪心算法】详细图解
  8. python实现不使用额外的空间判断输入数字是否是回文数
  9. mac键盘符合对应含义(⌘ ⇧)
  10. cfturbo破解版-叶轮设计软件
  11. 在Unity3D中控制动画播放
  12. deepin 下安装xdroid
  13. Bootstrap系列之下拉菜单(Dropdowns)
  14. 红米4x 刷android 8.0,【红米4X 安卓6.0.1救砖线刷包】免解锁MIUI V8.5.4.0.MAMCNED稳定版 精简线刷包...
  15. Linux那些事儿之我是U盘(28)第一次亲密接触(四)
  16. Cortex-M中特别实用的DWT计数器
  17. 关于IE非安全更新带来flash和ActivX不能激活的解决办法(zt)
  18. 专访架构师周爱民:谈企业软件架构设计[转]
  19. 苹果 python蚂蚁森林自动收能量_Python自动化收取蚂蚁森林能量,不错过暗恋的她...
  20. 【CodeForces】Codeforces Global Round 9

热门文章

  1. 媒体的态度和立场如何掌握?
  2. Datawindow自动调整列宽
  3. 什么软件可以搜索计算机知识,生活必备电脑知识技巧大全
  4. pytorch实战-求函数极值
  5. 什么是固定资产(亿)?
  6. 001_【SAP精英之路】-设置GUI快捷方式,保存客户端,语言等信息
  7. Fmincon函数学习整理
  8. Python爬取ps笔刷素材--大文件下载
  9. 【工具】m3u8转为mp4
  10. DB2中的NVL和NVL2函数