【小沐学NLP】Python实现词云图

38 篇文章 8 订阅
🍺NLP开发系列相关文章编写如下🍺:
1🎈【小沐学NLP】Python实现词云图🎈
2🎈【小沐学NLP】Python实现图片文字识别🎈
3🎈【小沐学NLP】Python实现中文、英文分词🎈
4🎈【小沐学NLP】Python实现聊天机器人(ELIZA))🎈
5🎈【小沐学NLP】Python实现聊天机器人(ALICE)🎈
6🎈【小沐学NLP】Python实现聊天机器人(微软Azure)🎈
7🎈【小沐学NLP】Python实现聊天机器人(微软小冰)🎈
8🎈【小沐学NLP】Python实现聊天机器人(钉钉机器人)🎈
9🎈【小沐学NLP】Python实现聊天机器人(微信机器人)🎈
10🎈【小沐学NLP】Python实现聊天机器人(Selenium、七嘴八舌)🎈
11🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,代码示例)🎈
12🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,集成前端页面)🎈
13🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,集成web服务)🎈

1、NLP

1.1 NLP定义

自然语言处理 (Natural Language Processing) 是人工智能(AI)的一个子领域。自然语言处理(NLP)就是在机器语言和人类语言之间沟通的桥梁,以实现人机交流的目的。

在这里插入图片描述

1.2 NLP研究方向

  • 信息抽取:从给定文本中抽取重要的信息,比如时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。
  • 文本生成:机器像人一样使用自然语言进行表达和写作。依据输入的不同,文本生成技术主要包括数据到文本生成和文本到文本生成。数据到文本生成是指将包含键值对的数据转化为自然语言文本;文本到文本生成对输入文本进行转化和处理从而产生新的文本。
  • 问答系统:对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。
  • 对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。
  • 文本挖掘:包括文本聚类、分类、情感分析以及对挖掘的信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习的。

在这里插入图片描述

  • 语音识别和生成:语音识别是将输入计算机的语音符号识别转换成书面语表示。语音生成又称文语转换、语音合成,它是指将书面文本自动转换成对应的语音表征。
  • 信息过滤:通过计算机系统自动识别和过滤符合特定条件的文档信息。通常指网络有害信息的自动识别和过滤,主要用于信息安全和防护,网络内容管理等。
  • 舆情分析:是指收集和处理海量信息,自动化地对网络舆情进行分析,以实现及时应对网络舆情的目的。
  • 信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。
  • 机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。

2 词云图

“词云”由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)于2006年最先使用。

词云图的构成元素是词汇、颜色、图形、大小,其中颜色代表了不同的词汇,它通过颜色深浅、气泡大小等容易判断度量的大小,以关键词字体的大小直接展示数据的数值大小,使图表具有直观、有趣的效果。它可以过滤掉源文本中大量的无用信息,使读者只要一眼扫过文本就可以读懂报告的主要内容。

2.1 wordcloud

2.1.1 安装

  • 安装词云的第三方库
pip install wordcloud
or
pip install wordcloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

2.1.2 wordcloud例子

  • 使用wordcloud进行测试
import matplotlib.pyplot as plt
import wordcloud

# 数据获取
with open("d:\西游记.txt", 'r', encoding='gbk')as f:
    text = f.read()
    
wc = wordcloud.WordCloud(background_color="white",
                         font_path="C:\\Windows\\Fonts\\simhei.ttf", 
                         width=500, height=500)
wc.generate(text)
wc.to_file("pywcloud.png")

fig = plt.figure()
# 设置窗口标题
# fig.canvas.set_window_title("爱看书的小沐")
# fig.canvas.manager.window.setWindowTitle("爱看书的小沐")
fig.canvas.manager.window.title("西游记的词云 - 爱看书的小沐")

plt.imshow(wc, interpolation='catrom')
plt.axis('off')
plt.show()

在这里插入图片描述

2.1.3 wordcloud+jieba例子

  • 使用wordcloud+jieba进行测试
import matplotlib.pyplot as plt
import jieba
import wordcloud

# 提取数据
with open("d:\西游记.txt", 'r', encoding='gbk')as f:
    text = f.read()

wc = wordcloud.WordCloud(
    font_path="C:\\Windows\\Fonts\\simhei.ttf", 
    width=500, height=500)
wc.generate(" ".join(jieba.lcut(text)))
wc.to_file("wc.png")

fig = plt.figure()
fig.canvas.manager.window.title("西游记的词云 - 爱看书的小沐")

plt.imshow(wc, interpolation='catrom')
plt.axis('off')
plt.show()

在这里插入图片描述

2.1.4 wordcloud+jieba+自定义形状例子

  • 使用wordcloud+jieba+各种形状进行测试
import matplotlib.pyplot as plt
import jieba
import wordcloud
from PIL import Image
import numpy as np

# 数据获取
with open("d:\西游记.txt", 'r', encoding='gbk')as f:
    text = f.read()

font = r'C:\Windows\Fonts\simhei.ttf'
sep_list = jieba.lcut_for_search(text)
sep_list = " ".join(sep_list)
wc = wordcloud.WordCloud(
    scale=5,          # 调整图片大小
    font_path=font,   # 使用的字体库
    max_words=100,    # 词云显示的最大词数
    margin=1,         # 字体之间的间距
    mask=np.array(Image.open("d:\heart.png")),  # 背景图片
    background_color='white',                   # 背景颜色
    max_font_size=200,
    # min_font_size=1,
    # stopwords=STOPWORDS,                      #屏蔽的内容
    collocations=False,                         # 避免重复单词
    width=1000, height=1000                     # 图像宽高,字间距
)

wc.generate(sep_list)
wc.to_file("wc.png")

fig = plt.figure()
fig.canvas.manager.window.title("西游记的词云 - 爱看书的小沐")
plt.imshow(wc, interpolation='catrom')
plt.axis('off')
plt.show()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 pyecharts

https://pyecharts.org/#/

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

pyecharts是基于echarts的python库,能够绘制多种交互式图表,和其他可视化库不一样,pyecharts支持链式调用。也就是说添加图表元素、修改图表配置,只需要简单的调用组件即可。
在这里插入图片描述

2.2.1 安装

  • (1)pip 安装:
pip(3) install pyecharts

在这里插入图片描述

  • (2)源码安装:
$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
# 或者执行 python install.py

2.2.2 入门例子

  • 代码如下:
from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render()
  • 运行结果如下:
    在这里插入图片描述

2.2.3 WordCloud例子一

  • 代码如下:
import pyecharts.options as opts
from pyecharts.charts import WordCloud

data = [
    ("爱看书的小沐", "999"),
    ("爱发呆的戈戈", "888"),
    ("供气质量", "777"),
    ("生活用水管理", "688"),
    ("一次供水问题", "588"),
    ("交通运输", "516"),
    ("城市交通", "515"),
    ("环境保护", "483"),
    ("房地产管理", "462"),
    ("城乡建设", "449"),
    ("社会保障", "407"),
    ("文体与教育管理", "406"),
    ("公共安全", "406"),
    ("公交运输管理", "386"),
    ("出租车运营管理", "385"),
    ("供热管理", "375"),
    ("市容环卫", "355"),
    ("自然资源管理", "355"),
    ("粉尘污染", "335"),
    ("噪声污染", "324"),
    ("土地资源管理", "304"),
    ("物业服务与管理", "304"),
    ("医疗卫生", "284"),
    ("粉煤灰污染", "284"),
    ("占道", "284"),
    ("供热发展", "254"),
    ("农村土地规划管理", "254"),
    ("生活噪音", "253"),
    ("供热单位影响", "253"),
    ("城市供电", "223"),
    ("房屋质量与安全", "223"),
    ("燃气管理", "152"),
    ("教育管理", "152"),
    ("县区、开发区", "152"),
    ("宏观经济", "152"),
    ("教育管理", "112"),
    ("社会保障", "112"),
    ("生活用水管理", "112"),
    ("物业服务与管理", "112"),
    ("分类列表", "112"),
    ("农业生产", "112"),
    ("二次供水问题", "112"),
    ("城市公共设施", "92"),
    ("拆迁政策咨询", "92"),
    ("物业服务", "92"),
    ("物业管理", "92"),
    ("社会保障保险管理", "92"),
    ("低保管理", "92"),
    ("文娱市场管理", "72"),
    ("城市交通秩序管理", "72"),
    ("执法争议", "72"),
    ("商业烟尘污染", "72"),
    ("占道堆放", "71"),
    ("地上设施", "71"),
    ("水质", "71"),
    ("无水", "71"),
    ("供热单位影响", "71"),
]

(
    WordCloud()
    .add(series_name="热点分析", data_pair=data, word_size_range=[6, 66])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
    .render("basic_wordcloud.html")
)
  • 运行结果如下:
    在这里插入图片描述

2.2.4 WordCloud例子二

  • 代码如下:

from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType


words = [
    ("爱看书的小沐", 10000),
    ("爱发呆的戈戈", 6181),
    ("Amy Schumer", 4386),
    ("Jurassic World", 4055),
    ("Charter Communications", 2467),
    ("Chick Fil A", 2244),
    ("Planet Fitness", 1868),
    ("Pitch Perfect", 1484),
    ("Express", 1112),
    ("Home", 865),
    ("Johnny Depp", 847),
    ("Lena Dunham", 582),
    ("Lewis Hamilton", 555),
    ("KXAN", 550),
    ("Mary Ellen Mark", 462),
    ("Farrah Abraham", 366),
    ("Rita Ora", 360),
    ("Serena Williams", 282),
    ("NCAA baseball tournament", 273),
    ("Point Break", 265),
]
c = (
    WordCloud()
    .add("", words, word_size_range=[20, 100], shape=SymbolType.DIAMOND)
    .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond"))
    .render("wordcloud_diamond.html")
)

  • 运行结果如下:
    在这里插入图片描述

2.2.5 WordCloud例子三

  • 代码如下:

from pyecharts import options as opts
from pyecharts.charts import WordCloud

words = [
    ("爱看书的小沐", 1446),
    ("爱发呆的戈戈", 1328),
    ("汽车", 928),
    ("视频", 906),
    ("电视", 825),
    ("Lover Boy 88", 514),
    ("动漫", 486),
    ("音乐", 53),
    ("直播", 163),
    ("广播电台", 86),
    ("戏曲曲艺", 17),
    ("演出票务", 6),
    ("给陌生的你听", 1),
    ("懒洋洋", 1437),
    ("商业财经", 422),
    ("娱乐八卦", 353),
    ("军事", 331),
    ("科技资讯", 313),
    ("社会时政", 307),
    ("时尚", 43),
    ("网络奇闻", 15),
    ("旅游出行", 438),
    ("景点类型", 957),
    ("花鸟萌宠", 914),
    ("绿植花卉", 311),
    ("狗", 257),
    ("其他宠物", 131),
    ("水族", 125),
    ("猫", 122),
    ("动物", 81),
    ("鸟", 67),
    ("创业", 363),
    ("目标职位", 162),
    ("目标行业", 50),
    ("兼职", 21),
    ("期望年薪", 20),
    ("实习", 16),
    ("雇主类型", 10),
    ("星座运势", 789),
    ("星座", 316),
    ("公益", 90),
]

c = (
    WordCloud()
    .add(
        "",
        words,
        word_size_range=[20, 100],
        textstyle_opts=opts.TextStyleOpts(font_family="cursive"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-自定义文字样式"))
    .render("wordcloud_custom_font_style.html")
)
  • 运行结果如下:在这里插入图片描述

2.3 stylecloud

官方地址:
https://github.com/minimaxir/stylecloud

Python package + CLI to generate stylistic wordclouds, including gradients and icon shapes!
stylecloud is a Python package that leverages the popular word_cloud package, adding useful features to create truly unique word clouds!

2.3.1 安装

pip install stylecloud
or
pip install stylecloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

在这里插入图片描述

2.3.2 测试例子

import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt')

在这里插入图片描述

import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-apple-alt')

在这里插入图片描述

import stylecloud

from stop_words import get_stop_words
stop_words = get_stop_words('english')
stylecloud.gen_stylecloud(file_path='D:\jianai.txt',
                          icon_name='fas fa-apple-alt',
                         palette='cartocolors.qualitative.Pastel_3',
                          background_color='black',
                          output_name='apple.png',
                          collocations=False,
                          custom_stopwords=stop_words)

在这里插入图片描述

import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-camera')

在这里插入图片描述

import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-dolly')

在这里插入图片描述

import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-smile')

在这里插入图片描述


结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值