【头歌-Python】9.3 中英文词云绘制(project) 第1~3关

news2024/11/25 2:49:52

第1关:词云练习1

任务描述

本关任务:编写一个能制作词云的小程序。

相关知识

词云

词云,也叫文字云,是一种应用广泛的数据可视化方法。是过滤掉文本中大量的低频信息,形成“关键词云层”或“关键词渲染”,对出现频率较高的“关键词”予以视觉化的突出展现,使浏览者只要一眼扫过文本就可领略文本的主旨。

word_cloudpython 的一个第三方库,可根据文本或文本中的词频,对文本内容进行可视化。
安装方法:

pip install wordcloud

在这里插入图片描述

word_cloud生成词云的主要方法有如下,分别用于以词频为参数或以字符文本为参数的场景。

方法名使用场景
fit_words(frequencies)根据词频生成词云,参数为包含词与词频的字典,为generate_from_frequencies的别名
generate(text)根据文本生成词云,是generate_from_text的别名
generate_from_frequencies(frequencies)根据词频生成词云,参数为词频字典
generate_from_text(text)根据文本生成词云,如果参数是排序的列表,需设置’collocations=False’,否则会导致每个词出现2次。
process_text(text)将英文长文本text分词并去除屏蔽词后生成词云。

请按照如下要求,依次绘制对应的词云图:
根据文件 Who Moved My Cheese.txt 的内容,用词频为参数的方法绘制英文词云,设置背景色为白色,不显示坐标轴。
在这里插入图片描述
(图片仅供参考,与本题要求不同)

编程要求

根据提示,在右侧编辑器补充代码,完成词云图的制作。

测试说明

平台会对你编写的代码进行测试:

  • 预期输出:
图像对比一致,恭喜通关!

参考代码

import string
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def read_file(file):
    """接收文件名为参数,将文件中的内容读为字符串,只保留文件中的英文字母和西文符号,过滤掉中
    文,所有字符转为小写,将其中所有标点、符号替换为空格,返回英文文本字符串。"""
    with open(file, 'r', encoding='utf-8') as f:
	    res = ''.join([x for x in f.read() if ord(x)<256]).lower()
	    for c in string.punctuation:
	        res = res.replace(c, ' ')
	    return res
    
def word_frequency(txt):
    """参数 txt去除标点、符号的文本,统计并返回每个单词出现的次数。返回值为字典类型"""
    dic = {}
    for s in txt.split():
        dic[s] = dic.get(s, 0)+1
    return dic

def draw_cloud_en_freq(en_frequency):
    """参数 en_frequency为字典类型词频,绘制词云,显示高频单词数量为80个,图片的宽度600,高度400,背景白色、字体最大值150、图片边缘为5,放大画布1.5倍,不随机(random_state=False),不显示坐标轴,词云保存为图片,路径和名为:'result/result.png' """
    wc = WordCloud(max_words=80, width=600, height=400,
                   background_color='White', max_font_size=150,
                   margin=5, scale=1.5, random_state=False)
    wc.generate_from_frequencies(en_frequency)
    plt.axis('off')
    wc.to_file('result/result.png')
    plt.imshow(wc)

if __name__ == '__main__':
    filename = 'Who Moved My Cheese.txt'        # 英文文件名
    content = read_file(filename)               # 调用函数返回字典类型的数据
    frequency_result = word_frequency(content)  # 统计词频
    draw_cloud_en_freq(frequency_result)        # 调用函数生成词云
    plt.show()                                  # 显示图像

第2关:词云练习2

任务描述

本关任务:编写一个能制作词云的小程序。

相关知识

相关知识请参考 词云练习1 内的相关知识
根据文件“Who Moved My Cheese.txt”的内容,用文本为参数的方法绘制英文词云,设置背景色为白色,不显示坐标轴。观察两种方法绘制结果,分析其原因,了解stopwords参数的意义及stopwords文件的内容,思考用词频方法时,怎样处理才能得到与文本方法相近的结果?
在这里插入图片描述

编程要求

根据提示,在右侧编辑器补充代码,完成词云图的制作,具体要求查看模板中的函数文档注释。

测试说明

平台会对你编写的代码进行测试:

  • 预期输出:
图像对比一致,恭喜通关!

参考代码

import string
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def read_file(file):
    """接收文件名为参数,将文件中的内容读为字符串,只保留文件中的英文字母和西文符号,过滤掉中
    文,所有字符转为小写,将其中所有标点、符号替换为空格,返回英文文本字符串。"""
    with open(file, 'r', encoding='utf-8') as f:
	    res = ''.join([x for x in f.read() if ord(x)<256]).lower()
	    for c in string.punctuation:
	        res = res.replace(c, ' ')
	    return res
	    
def draw_cloud_en_txt(text):
    """参数text读文件获取的文本,绘制词云,显示高频单词数量为80个,
    图片的宽度600,高度400,背景白色、字体最大值150、图片边缘为5,
    放大画布1.5倍,不随机(random_state=False),不显示坐标轴,
    词云保存为图片,路径和名为:'result/result.png' """
    wc = WordCloud(max_words=80, width=600, height=400,
                   background_color='White', max_font_size=150,
                   margin=5, scale=1.5, random_state=False)
    wc.generate(text)
    plt.axis('off')
    wc.to_file('result/result.png')
    plt.imshow(wc)
    
if __name__ == '__main__':
    filename = 'Who Moved My Cheese.txt'  # 英文文件名
    content = read_file(filename)         # 调用函数返回字典类型的数据
    draw_cloud_en_txt(content)

第3关:词云练习3

任务描述

本关任务:编写一个能制作词云的小程序。

相关知识

相关知识请参考 词云练习1 内的部分内容

jieba分词
中文词之间无分隔,所以中文词云的制作略麻烦,需要提前对文本进行分词处理。 jieba 是目前应用较广泛的一个中文分词库,可以导入 jieba 利用它进行分词再绘制词云。

import jieba
import jieba.analyse
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))

应用 textrank() 方法对字符串进行分词,可用参数 topK 设置最多返回多少个词(词性表 allowPOS 默认仅提取词性为地名 ns 、名词 n 、动名词 vn 、动词 v),例如设置 topK=100 ,返回最多 100 个词。返回的词与其权值以元组类型作为列表的元素,按权值降序排列,数据格式如:

('科技', 1.0), ('创新', 0.6818768373499384), ('研究', 0.39785607069634815), ('科学家', 0.39327521713414126), ...] 

将这个列表转为字典类型, 利用 WordCloud.generate_from_frequencies() 方法,以词频作参数,便可以绘制中文词云了。读文件 scientist.txt ,根据内容生成词云,字体不限,但要求中文能正常显示。设置用前 60 个高频词生成词云,背景色为白色,用 ball.jpg 作背景图片或自选背景图片。
在这里插入图片描述

编程要求

根据提示,在右侧编辑器补充代码,完成词云图的制作。

测试说明

平台会对你编写的代码进行测试:

  • 预期输出:
{'科技': 1.0, '创新': 0.6818768373499384, '研究': 0.39785607069634815}
图像对比一致,恭喜通关!

参考代码

import jieba.analyse
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def read_file(file):
    """接收文件名为参数,将文件中的内容读为字符串"""
    with open(file, 'r', encoding='utf-8') as f:
    	return f.read()

def word_frequency_cn(txt):
    """参数 txt读文件获取的文本,jieba.analyse.textrank()可用参数topK设置最多返回多少个按词频降序排列的关键词列表,
    数据格式为列表:[('人民', 1.0), ('中国', 0.9533997295396189), ...],
    将列表转为字典:{'人民': 1.0, '中国': 0.9533997295396189,...},返回这个字典"""
    List = jieba.analyse.textrank(txt, topK=60, withWeight=True)
    print(List)
    return dict(List)
    
def draw_cloud_cn(frequency_dict):
    """参数为词频,字典类型,设定图片的中文字体为('fonts/MSYH.TTC')、背景为白色、
    背景图片'ball.jpg'、字体最大值200、按比例进行放大画布2倍,储存为 result/result.png"""
    bg = plt.imread('ball.jpg')
    wc=WordCloud(font_path='fonts/MSYH.TTC',
        background_color='White',
        mask=bg, max_font_size=200,
        scale=2, random_state=False)
    wc.generate_from_frequencies(frequency_dict)
    plt.axis('off')
    wc.to_file('result/result.png')
    plt.imshow(wc)

if __name__ == '__main__':
    filename = '湿地公约.txt'                # 用于生成词云的中文文件名
    content = read_file(filename)
    frequency = word_frequency_cn(content)  # 利用jieba对文本进行分词,并统计词频
    draw_cloud_cn(frequency)                # 绘制词云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于VMWare组件安装Centos7.9

1.前提条件 使用VMware进行安装&#xff0c;VMware可以自行下载&#xff0c;需要介质(VMware和CentOS7.9)的同仁&#xff0c;请留言&#xff0c;我给你下载链接。 2.CentOS7.9安装 1.打开VMware&#xff0c;点击“新建虚拟机(N)...” 2.选择“典型” &#xff0c;点击“下一步…

基础知识学习---牛客网C++面试宝典(六)操作系统--第一节

1、本栏用来记录社招找工作过程中的内容&#xff0c;包括基础知识学习以及面试问题的记录等&#xff0c;以便于后续个人回顾学习&#xff1b; 暂时只有2023年3月份&#xff0c;第一次社招找工作的过程&#xff1b; 2、个人经历&#xff1a; 研究生期间课题是SLAM在无人机上的应…

A100 GPU服务器安装GPU驱动教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【OpenCV DNN】Flask 视频监控目标检测教程 06

欢迎关注『OpenCV DNN Youcans』系列&#xff0c;持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 06 3.6 OpenCVFlask实时监控和视频播放cvFlask06 项目的文件树cvFlask06 项目的程序文件cvFlask06 项目的网页模板cvFlask06 项目的运行 本系列从零开始&#xff0c;详细…

chatgpt赋能python:Python排序算法实现及其应用

Python排序算法实现及其应用 排序是计算机科学中最基础也是最常用的算法之一。在数据分析、数据挖掘和机器学习等领域&#xff0c;排序算法有着广泛的应用。Python作为一种流行的编程语言&#xff0c;在排序方面具有一定的优势。本文将介绍一些常见的Python排序算法实现以及应…

有趣的图(三)(57)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 咱们之前分别学习了图的基本概念&#xff0c;和图的深度优先遍历算法dfs。 你学会了吗&#xff1f; 咱们今天要学…

Linux系统的tty架构及UART驱动详解

​一、模块硬件学习 1.1. Uart介绍 通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;通常称为UART&#xff0c;是一种异步收发传输器&#xff0c;是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。 作为把并…

面试问题总结----C/C++部分

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应用,有接触SLAM、Linux、ROS、C/C++、DJI OSDK等; 3、参加工作后…

C++程序流程结构

目录 程序流程结构 一、选择结构 1.1 If语句 1.2 三目运算符 1.3 switch语句 二、循环结构 2.1 while 循环语句 2.2 do…while循环 2.3 for循环 2.4 嵌套循环 三、跳转语句 3.1 break语句 3.2 continue 语句 3.3 goto语句 程序流程结构 C/C支持最基本的三种程…

20230623在WIN10安装PROTEL DXP2004(STEP-BY-STEP)

20230623在WIN10安装PROTEL DXP2004&#xff08;STEP-BY-STEP&#xff09; https://xiazai.zol.com.cn/detail/43/428470.shtml Protel DXP 2004 https://www.onlinedown.net/soft/580490.htm Protel DXP 2004 DXP2004 安装步骤 Failed To load Parallel Port Driver Welcom…

vue或react中修改组件样式的方法

vue或react中修改组件样式的方法 从组件库中引入的组件深度选择器&#xff1a;deep和&#xff1a;global深度选择器在scss中的使用关键点 常规的组件样式修改vue中的样式修改react中的样式修改 从组件库中引入的组件 深度选择器&#xff1a;deep和&#xff1a;global 在 Vue …

Python 算法交易实验63 关于回测

说明 项目结束了&#xff0c;这几天把量化第一版搭起来&#xff0c;量化很重要&#xff0c;现在可以迈出第一步了。首先要关注的是回测&#xff0c;和前不久写的这篇文章呼应&#xff0c;测试的确是一个相对独立&#xff0c;又非常重要的部件。过去比较少关注在方面上&#xf…

数据分析案例-航空公司满意度数据可视化

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【瑞萨RA_FSP】ADC——电压采集

文章目录 一、ADC简介二、ADC的结构框图1. 电压输入范围2. 工作模式3. 转换过程顺序4. 触发源5. ADC转换时间6. 数据寄存器7. 电压转换 一、ADC简介 ADC即模拟数字转换器&#xff0c;ADC英文全称&#xff08;Analog-to-digital converter&#xff09;&#xff0c; 是一种用于将…

Delphi XE10 dxLayoutControl 控件应用指南

Delphi XE10 dxLayoutControl 控件应用指南 DevExpress VCL套件是一套非常强大的界面控件&#xff0c;可惜关于Delphi开发方面的说明太少&#xff0c;有些控件使用起来一头雾水&#xff0c;不知从何下手。本节详细介绍在Delphi Xe10 Seattle中如何利用dxLayoutControl 控件来做…

MMENGINE.LOGGING

MMENGINE.LOGGING 文章目录 MMENGINE.LOGGING[Print_log](https://mmengine.readthedocs.io/zh_CN/latest/api/generated/mmengine.logging.print_log.html "Print_log")[MMENGINE.LOGGING.LOGGER 源代码](https://mmengine.readthedocs.io/zh_CN/latest/_modules/mm…

Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II

目录 88. 合并两个有序数组 Merge Sorted Array &#x1f31f;  89. 格雷编码 Gray Code &#x1f31f;&#x1f31f; 90. 子集 II Subsets II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Py…

计算机网络-网络体系结构

目录 计算机网络的基本概念计算机网络的定义组成与功能计算机网络的分类按照网络的作用范围进行分类按照网络的使用者进行分类 计算机网络主要性能指标 计算机网络体系结构计算机网络协议、接口、服务等概念ISO/OSI 参考模型和 TCP/IP 模型OSI七层模型TCP/IP 模型封装与分用 计…

[Hadoop之Hive安装配置 第二篇 ]

前言: 记录一下Hive笔记 目录 前言: Hive的基本简介,使用场景介绍 安装地址: 官网的Hive文档地址: 官网 Hive 的教程地址 Hive安装涉及到的应用介绍 Hive安装步骤: 1.解压hive压缩包, tar -zxvf 压缩包,然后进入module目录 查看压缩的文件 ,并改名为hive 2. pwd查看当…

Paper | CenterPoint

CenterPoint paper 文章目录 CenterPoint paper摘要IntroductionRelated WorkCenterPointTwo-Stage CenterPoint Reference 论文链接&#xff1a;https://arxiv.org/pdf/2006.11275.pdf 代码链接&#xff1a;https://github.com/tianweiy/CenterPoint 摘要 该文章是Center-ba…