• jieba分词


    worldcloud

    • 生成词云时,wordcloud 默认会以空格或标点为分隔符对目标文本进行分词处理。
    • 对于中文文本,分词处理需要由用户来完成。
    • 一般步骤是先将文本分词处理,然后以空格拼接,再调用wordcloud库函数。
    • 处理中文时还需要指定中文字体。
      例如,选择了微软雅黑字体(msyh.ttf)作为显示效果,需要将该字体文件与代码存放在同一目录下或在字体文件名前增加完整路径

    简单使用

    1、打开自己电脑C:\Windows\Fonts
    在这里插入图片描述

    2、选择微软雅黑字体(msyh.ttf)作为显示效果(当然也可以选择自己喜欢的字体样式)
    右键复制,并将该字体文件与代码存放在同一目录下(或在字体文件名前增加完整路径),
    将此文字文件命名为"msyh.ttf"
    在这里插入图片描述

    3、完整代码如下,

    import jieba
    from wordcloud import WordCloud
    txt = '弱小的人,才习惯,嘲讽和否定,而内心,强大的人,从不吝啬赞美和鼓励!我们就是后浪,奔涌吧!后浪,奔涌吧!'
    words = jieba.lcut(txt)     #精确分词
    newtxt = ''.join(words)    #空格拼接
    wordcloud = WordCloud(font_path =  "msyh.ttf").generate(newtxt)wordcloud.to_file('中文词云图.jpg')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行成功,(红色不代表报错哦)
    在这里插入图片描述

    4、最后去存放代码的那个文件夹下查找 生成的“中文词云图.jpg”文件。(每次生成的都是随机的)
    在这里插入图片描述

    生成带背景图的词云图

    • 准备一张带有透明背景的 png格式图片
    • 准备一个txt文本文件,并与代码存放在同一目录下
      1、找到一张图片,我们发现这张是有黄色背景的,于是我们需要把背景设置成透明的。
      在这里插入图片描述
      打开PS操作一下,当然你也可以直接在网上下载透明背景的图片。
      在这里插入图片描述
      这是我扣好的图,需要自取,直接右键保存,将文件名命名为Alice.png

    再将此文件与代码文件存在同一目录下
    在这里插入图片描述
    2、准备一个txt文本文件(文件内容是一篇英文),并命名为Alice.txt

    再将此文件与代码文件存在同一目录下
    在这里插入图片描述

    3、复制完整代码,直接运行即可

    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    from PIL import Image
    import numpy as np
    mask = np.array(Image.open("Alice.png"))
    
    
    f = open('Alice.txt','r',encoding = 'utf-8')
    txt = f.read()
    f.close
    wordcloud = WordCloud(background_color="white",\
                          width = 800,\
                          height = 600,\
                          max_words = 200,\
                          max_font_size = 80,\
                          mask = mask,\
                          contour_width = 3,\
                          contour_color = 'steelblue'
                          ).generate(txt)
    wordcloud.to_file('Alice_词云图.png')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    4、在代码所在文件夹内,找到文件 Alice_词云图.png ,并打开生的成词云图。
    在这里插入图片描述

    生成中文带背景的词云图

    最后一张是中文带背景图的词云,效果图被平台删了,大家自己试着跑一跑下面的代码吧。

    完整代码如下,运行前请准备图片和txt文件,并将二者与代码存放在同一目录下。(参照一、二步骤)

    import jieba
    import numpy as np
    from PIL import Image
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    
    def trans_ch(txt):
      words = jieba.lcut(txt)
      newtxt = ''.join(words)
      return newtxt
    
    
    f = open('maozedong.txt','r',encoding = 'utf-8')     #将你的文本文件名与此句的'maozedong.txt'替换
    txt = f.read()
    f.close
    txt = trans_ch(txt)
    mask = np.array(Image.open("love.png"))               #将你的背景图片名与此句的"love.png"替换
    wordcloud = WordCloud(background_color="white",\
                          width = 800,\
                          height = 600,\
                          max_words = 200,\
                          max_font_size = 80,\
                          mask = mask,\
                          contour_width = 4,\
                          contour_color = 'steelblue',\
                            font_path =  "msyh.ttf"
                          ).generate(txt)
    wordcloud.to_file('love_词云图.png')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    参数解析

    相信很多人在第一眼看到下面这些图时,都会被其牛逼的视觉效应所吸引,这篇文章就教大家怎么用Python画出这种图。

    在这里插入图片描述

    前期准备

    上面的这种图叫做词云图,主要用途是将文本数据中出现频率较高的关键词以可视化的形式展现出来,使人一眼就可以领略文本数据的主要表达意思。词云图中,词的大小代表了其词频,越大的字代表其出现频率更高。

    那生成一张词云图的主要步骤有哪些?过程中又需要用到哪些Python库呢?

    首先需要一份待分析的文本数据,由于文本数据都是一段一段的,所以第一步要将这些句子或者段落划分成词,这个过程称之为分词,需要用到Python中的分词库jieba
    分词之后,就需要根据分词结果生成词云,这个过程需要用到wordcloud
    最后需要将生成的词云展现出来,用到大家比较熟悉的matplotlib
    理清了词云图绘制的主要脉络之后,下面就用代码操作起来。

    小试牛刀

    # 导入相应的库
    import jieba
    import numpy as np
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    ​
    # 导入文本数据并进行简单的文本处理
    # 去掉换行符和空格
    text = open("./data/新年歌.txt",encoding='utf8').read()
    text = text.replace('\n',"").replace("\u3000","")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    # 导入停词
    # 用于去掉文本中类似于'啊'、'你','我'之类的词
    stop_words = open("F:/NLP/chinese corpus/stopwords/stop_words_zh.txt",encoding="utf8").read().split("\n")# 使用WordCloud生成词云
    word_cloud = WordCloud(font_path="simsun.ttc",  # 设置词云字体
                           background_color="white", # 词云图的背景颜色
                           stopwords=stop_words, # 去掉的停词
                           collocations=False ) 
    word_cloud.generate(text_cut)# 运用matplotlib展现结果
    plt.subplots(figsize=(12,8))
    plt.imshow(word_cloud)
    plt.axis("off")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • font_path 设置词云字体
    • background_color 词云图的背景颜色
    • stopwords 去掉的停词(如果不设置按默认停词,默认会以空格或标点为分隔符对目标文本进行分词处理。)
    • collocations 默认为True,设置为False词云图不会重复
      在这里插入图片描述
      一张简单的词云图就成功生成啦,但看起来好像并没有特别好看,怎么生成带特定形状的词云呢?

    登堂入室

    想生成带特定形状的词云,首先得准备一张该形状的图片,且除了目标形状外,其他地方都是空白的,如下面这张用于演示的图。

    上图中除了福字之外都是白色的,准备好之后就上代码
    在这里插入图片描述

    import jieba
    import numpy as np
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    from PIL import Image
    ​
    text = open("./data/新年歌.txt",encoding='utf8').read()
    text = text.replace('\n',"").replace("\u3000","")
    text_cut = jieba.lcut(text)
    text_cut = ' '.join(text_cut)
    ​
    stop_words = open("F:/NLP/chinese corpus/stopwords/stop_words_zh.txt",encoding="utf8").read().split("\n")# 主要区别
    background = Image.open("./data/background.png")
    graph = np.array(background)
    ​
    word_cloud = WordCloud(font_path="simsun.ttc", 
                           background_color="white", 
                           mask=graph, # 指定词云的形状
                           stopwords=stop_words) 
    ​
    word_cloud.generate(text_cut)
    plt.subplots(figsize=(12,8))
    plt.imshow(word_cloud)
    plt.axis("off")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • mask 指定词云的形状

    代码部分和普通的图基本一致,区别在于要导入相应形状的图片,并在wordcloud设置了mask参数。
    生成的词云图如下:
    在这里插入图片描述

  • 相关阅读:
    Express操作MongoDB
    【005】Shell退出状态码
    监控文件事件
    Linux系统安装Nodejs(详细教程)
    排序算法复杂度
    c++题目:输入3个数,求最大值
    前后端交互:axios 和 json;springboot 和 vue
    pgpool-II 4.3 中文手册 - 入门教程
    Akshare获取分红数据
    Redis-数据类型(基本指令、String、List、Set、Hash、ZSet、BitMaps、HyperLogLog、GeoSpatial)/发布和订阅
  • 原文地址:https://blog.csdn.net/m0_54634272/article/details/127739434