开发者

基于python生成词云图的代码示例

开发者 https://www.devze.com 2023-11-19 09:27 出处:网络 作者: 颜酱
目录1. 读文件2. 分词3. 生成云图4. 显示词云图其他文件input.txtcloud.jpggenerate_cloud_image.py运行
目录
  • 1. 读文件
  • 2. 分词
  • 3. 生成云图
  • 4. 显示词云图
  • 其他文件
    • input.txt
    • cloud.jpg
    • generate_cloud_image.py
  • 运行

    基于python生成词云图的代码示例

    类似生成各种形状的云图,我也会啦!

    其实也就是针对新手吧,我估计老手分分钟,哈哈哈,我怕我忘了,随手记录下~

    四个步骤吧:

    • 读文件
    • 分词
    • 生成词云图
    • 显示词云图

    1. 读文件

    使用了下 codecs 库,读取内容更方便。

    import codecs
    def get_file_content(filePath):
      with codecs.open(filePath, 'r', 'utf-8') as f:
          txt = f.read()
      return txt
    

    2. 分词

    jieba是一个分词库,可以将一段文本分割成词语。cut 是将文本精确切分开,不存在冗余词语。比如颜酱是一个厉害的厨师,会变成['颜酱', '厉害', '厨师']Counter是一个计数器,可以统计词语出现的次数,most_common 是取出最常用的词语。

    import jieba
    from collections import Counter
    def get_words(txt):
        # 先分词,得到词语数组
        seg_list = jieba.cut(txt)
        # 开始计数
        c = Counter()
        for x in seg_list:
            if len(x)>1 and x != '\r\n':
                c[x] += 1
        word_list = []
        print('常用词频度统计结果')
         # 统计前99个词
        for (k,v) in c.most_common(99):
            word_list.append(str(k))
        # 将词语生成文本文件
        file = open("./dist/out_words.txt", 'w').close()
        with open("./dist/out_words.txt",'a+',encoding='utf-8') as writeFile:
            for (k,v) in c.most_common(99):    # 统计前99个词
                writeFile.write(str(k))
                writeFile.write(str(v))
                writeFile.write('\n')
        print(word_list)
        # ['发展','平安']
        return word_list
    

    3. 生成云图

    wordcloud 是一个词云库,可以将词语生成词云图片。

    import wordcloud;
    def generate_cloud_image(file_path, shape_image_path):
      word_list = get_words(get_file_content(file_path))
      string = ' '.join(word_list)
      # 读取词云形状图片
      image = imageio.v2.imread(shape_image_path)
      # 先实例化一个词云对象
      wc = wordcloud.WordCloud(width=image.shape[0],     # 词云图宽度同原图片宽度
                              height=image.shape[1],
                              background_color='white',  # 背景颜色白色
                              font_path='Arial Unicode.ttf',   php # 指定字体路径,微软雅黑,可从自带的字体库中找
                              mask=image,   # mask 指定词云形状图片,默认为矩形
                              scale=3)      # 默认为1,越大越清晰
      # 生成词云
      wc.generate(string)
      # 保存成文件,output_wordcloud.png,词云图
      wc.to_file('dist/output_wordcloud.png')
      # 弹出图片显示
      alert_image('dist/output_wordcloud.png')
    

    4. 显示词云图

    matplotlib是一个绘图库,可以将图片显示出来,plt 用于显示图片,mpimg 用于读取图片。

    #
    # plt用于显示图片
    import matplotlib.pyplot as plt
    # mpimg 用于读取图片
    import matplotlib.image as mpimg
    def alert_image(image_path):
      # 这里是让词云图弹出来显示
      lena = mpimg.imread(image_path) # 读取和代码处于同一目录下的 lena.png
      # 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
      lena.shape #(512, 512, 3)
      plt.imshow(lena) # 显示图片
      plt.axis('off') # 不显示坐标轴
      plt.show()
    

    这就可以了!

    其他文件

    准备好文件实验:

    input.txt

    input.txt

    cloud.jpg

    基于python生成词云图的代码示例

    generate_cloud_image.py

    generate_cloud_image.py:

    import codecs
    import jieba
    import imageio
    import wordcloud
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    from collections import Counter
    # def get_words(txt):...
    # 编程客栈def get_file_content:...
    # def alert_image(image_path):...
    # def generate_cloud_image(file_path, shape_image_paandroidth):...
    generate_cloud_image('input.txt', 'cloud.jpg')
    

    完整版:

    import codecs
    import jieba
    import imageio
    import wordcloud
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    from collections import Counter
    #  get_words函数用于统计词频,生成out.txt,展示词语和词频 如发展218 坚持170
    def get_words(txt):
        seg_list = jieba.cut(txt)
        c = Counter()
        for x in seg_list:
            if len(x)>1 and x != '\r\n':
                c[x] += 1
        word_list = []
        print('常用词频度统计结果')
         # 统计前99个词
        for (k,v) in c.most_common(99):
            word_list.append(str(k))
    
        file = open("./out_wordsjavascript.txt", 'w').close()
        with open("./out_words.txt",'a+',encoding='utf-8') as writeFile:
            for (k,v) in c.most_common(99):    # 统计前99个词
                writeFile.write(str(k))
                writeFile.write(str(v))
                writeFile.write('\n')
        print(word_list)
        # ['发展','平安']
        return word_list
    
    def get_file_content(filePath):
        with codecs.open(filePath, 'r', 'utf-8') as f:
            txt = f.read()
        return txt
    def alert_image(image_path):
        # 这里是让词云图弹出来显示
        lena = mpimg.imread(image_path) # 读取和代码处于同一目录下的 lena.png
        # 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
        lena.shape #(512, 512, 3)
        plt.imshow(lena) # 显示图片
        plt.axis('off') # 不显示坐标轴
        plt.show()
    
    # 根据文件生成词云图,file_path是文本文件路径,shape_image_path是词云图的图片途径
    def generate_cloud_image(file_path, shape_image_path):
        word_list = get_words(get_file_content(file_path))
        string = ' '.join(word_list)
        # 读取词云形状图片
        image = imageio.v2.imread(shape_image_path)
        # 生成词云图片,先实例化一个词云对象
        wc = wordcloud.WordCloud(width=image.shape[0],     # 词云图宽度同原图片宽度
                                height=image.shapepython[1],
                                background_color='white',  # 背景颜色白色
                                font_path='Arial Unicode.ttf',    # 指定字体路径,微软雅黑,可从win自带的字体库中找
                                mask=image,   # mask 指定词云形状图片,默认为矩形
                                scale=3)      # 默认为1,越大越清晰
        # 再给词云
        wc.generate(string)
        # 保存成文件,output_wordcloud.png,词云图
        wc.to_file('output_wordcloud.png')
        alert_image('output_wordcloud.png')
    
    generate_cloud_image('input.txt', 'cloud.jpg')
    

    运行

    记得先pip3 install jieba imageio wordcloud matplotlib然后python3 generate_cloud_image.py:文件在同一目录,进到这个目录下运行命令

    以上就是基于python生成词云图的代码示例的详细内容,更多关于python生成词云图的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号