zoukankan      html  css  js  c++  java
  • Jieba库使用和好玩的词云

    Jieba库使用和好玩的词云

    一、关于词云

    WordCloud库常规方法

    • 以WordCloud对象为基础
    • 配置参数、加载文本、输出文件
    函数 简述
    w.generate(txt) 向WordCloud对象w中加载文本txt
    w.to_file(file name) 将词云输出为图像文件,例如.png格式

    方法

    步骤:

    1. 配置对象参数
    2. 加载词云文本
    3. 输出词云文件 

    配置对象参数

    函数 简述
    font_path 字体路径,做中文词云必须设置字体,否则无法显示
    width 输出的画布宽度,默认为400像素
    height 输出的画布高度,默认为200像素
    max_words 要显示的词的最大个数,默认为200
    stop_words 指定词云的排除词列表,即不显示的单词列表
    max_font_size 显示的最大字体大小
    min_font_size   显示的最小字体大小
     background_color  指定词云图片的背景颜色,默认为黑色
    mask 指定词云形状,默认为长方形,需要引用imread()函数

     二、文本词频统计(以《红楼梦》为例)

    1. 下载一个《红楼梦》文本  这里将文本命名为 hongloumeng.txt
    2. 编写代码如下:
      #DreaminRedMansions.py
      import jieba   #调用jieba库
      
      txt = open("hongloumeng.txt","r",encoding="UTF-8").read()  #打开txt文件阅读
      
      words = jieba.lcut(txt)    #分词
      counts = {}   #建立一个空字典
      for word in words:
          if len(word)==1:
              continue
          else:
              counts[word]=counts.get(word,0) + 1    #遍历每个中文单词,通过字典来计数
      items = list(counts.items())    #将字典counts转换为列表类型
      items.sort(key=lambda x:x[1],reverse = True)   #对列表进行排序
      for i in range(20):
          word,count = items[i]
          print("{0:<10}{1:>5}".format(word,count))     #打印出前20个词

    但是运行出现错误,

    这是因为没有写明文本所在的绝对路径,以致找不到文本,打开文本属性找到位置复制即可。

    执行任有错误,

    win10电脑文本编码默认为ASCII码,我们应将其改为UTF-8编码,打开 hongloumeng.txt --文件--另存为--编码--UTF-8,取名为  shitouji.txt   ,按照上述方法找到新的文本位置即可。改正的代码如下:

    #DreaminRedMansions.py
    import jieba   #调用jieba库
    
    txt = open("D:我爱学习python3wenbenshitouji.txt","r",encoding="UTF-8").read()  #打开txt文件阅读
    
    words = jieba.lcut(txt)    #分词
    counts = {}   #建立一个空字典
    for word in words:
        if len(word)==1:
            continue
        else:
            counts[word]=counts.get(word,0) + 1    #遍历每个中文单词,通过字典来计数
    items = list(counts.items())    #将字典counts转换为列表类型
    items.sort(key=lambda x:x[1],reverse = True)   #对列表进行排序
    for i in range(20):
        word,count = items[i]
        print("{0:<10}{1:>5}".format(word,count))     #打印出前20个词
    

      效果如下:

    三、词云展现

    1、运用jieba库和wordcloud库,代码如下:注: .join( )函数:   连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的长字符串

    from wordcloud import WordCloud
    import jieba
    def create_word_cloud():
        path_txt = 'D:我爱学习python3wenben\shitouji.txt'
        
        text = open(path_txt,"r",encoding="UTF-8").read()
        
        wordlist = jieba.lcut(text) # jieba分词
        wl = " ".join(wordlist)
     
        # 设置词云
        w = WordCloud(
            # 设置背景颜色为白色
            background_color="white",
            # 设置最大显示的词云数为200
            max_words=200,
            # 字体的一般路径--宋体
            font_path='simsun.ttc',
            height=1200,
            width=1600,
            # 设置字体最大的字体大小
            max_font_size=100,
            # 设置配色方案
            random_state=100,
        )
    
    
        w.generate(wl)  # 生成词云
        w.to_file('img_book1.png')  # 把词云保存下
     
     
    if __name__ == '__main__':
        create_word_cloud()
    

       效果如下:

     2、指定词云形状

    mask:指定词云形状

    需要引用imread函数,目前  scipy库不包含 imread 函数,imread函数在imageio库里。

    from imageio import imread
    mk = imread("cloud.png")  #存为图片 cloud
    w = wordcloud.WordCloud(mask = mk)
    

     也可以用其他库,

    1. numpy库:numpy库是Python的一个扩展程序库,能够支持维度数组与矩阵运算。
    2. matplotlib库:matplotlib是python上的一个2D绘图库,它可以在夸平台上边出很多高质量的图像。
    3. PIL库:PIL 库是python中很有用的处理图像的库,对图像进行操作处理, 包括对原图处理,以及产生新的图片。从文件加载图像,可以使用Image.open( )函数,需要给出图片的绝对路径,例如: 
    from PIL import Image
    im = Image.open('chrome.png')   #图片的绝对路径
    

      指定词云形状的代码如下:

    from wordcloud import WordCloud
    from matplotlib import pyplot as plt
    from PIL import Image
    import numpy as np
    import jieba
    def create_word_cloud():
        path_txt = 'D:\我爱学习\python3\wenben\shitouji.txt'
        
        text = open(path_txt,"r",encoding="UTF-8").read()
        
        wordlist = jieba.lcut(text) # jieba分词
        wl = " ".join(wordlist)
        images = Image.open("C:\Users\邓若言\Desktop\timg.jpg")  
        maskImages = np.array(images)
        # 设置词云
        w = WordCloud(
            # 设置背景颜色为白色
            background_color="white",
            # 设置最大显示的词云数为2000
            max_words=2000,
            # 字体的一般路径--宋体
            font_path='simsun.ttc',
            height=1200,
            width=1600,
            # 设置字体最大的字体大小
            max_font_size=100,
            # 设置配色方案
            random_state=100,
            mask=maskImages
        )
    
        w.generate(wl)  # 生成词云
        plt.imshow(w)
        w.to_file('img_book2.png')  # 把词云保存下
     
     
    if __name__ == '__main__':
        create_word_cloud()
    

      

    原图片

     

    新词云图片如下

     

  • 相关阅读:
    零基础学习Java,视频、网上直播和线下培训,哪个更好?
    艾编程:海量消息数据的处理kafka以及海量数控读取储存处理Mycat
    艾编程coding老师:深入JVM底层原理与性能调优
    Are Noisy Sentences Useless for Distant Supervised Relation Extraction?
    A Probabilistic Formulation of Unsupervised Text Style Transfer
    Orderless Recurrent Models for Multi-label Classification
    Learning from Easy to Complex: Adaptive Multi-curricula Learning for Neural Dialogue Generation
    Hyper-Parameter Optimization: A Review of Algorithms and Applications
    Capturing document context inside sentence-level neural machine translation models with self-training
    ReZero is All You Need: Fast Convergence at Large Depth
  • 原文地址:https://www.cnblogs.com/deng11/p/12606483.html
Copyright © 2011-2022 走看看