Python_词云

词云

词云: 也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。

效果图:
在这里插入图片描述
制作词云需要的模块:

  • jieba(结巴):切割中文的模块;
  • wordcloud:使文本数据可视化
  • pillow:python3中专门用来处理图像的模块;
  • numpy
  • matplotlib

处理英文的词云

实现处理英文的词云比较简单,因为每个英文单词中间都有空格作为分隔符。
代码:

import re
import numpy as np
from PIL import Image
from wordcloud import wordcloud
import matplotlib

# 1.切割和处理英文字符
data = []
with open('/tmp/passwd') as f:
    for line in f:
        result = re.split(r'\s|:|/',line)
        result = [item for item in result if not re.findall(r'\s+|\d+',item) and item]
        data.extend(result)

# 2.打开图片,获取图片的数据信息 ----> 设置为你想要生成的词云的形状
imgObj = Image.open('./doc/wordcloud.jpg')
img_mask = np.array(imgObj)

# 3.创建词云对象,设置属性
wcObj = wordcloud.WordCloud(
    mask=img_mask,		# 数据如何填充到图片
    background_color='snow',		# 背景颜色
    min_font_size=5,		# 图片中最小的字体大小
    max_font_size=50,		# 图片中最小的字体大小
    width=1000,		# 图片宽度
    height=1000		# 图片高度
   
)


# 4.生成词云图片
# 词云绘制时,默认只处理字符串类型
# 怎么分割每个单词? ----> 必须以逗号分隔符分割
wcObj.generate(','.join(data))
wcObj.to_file('doc/passwd.png')

原图:
在这里插入图片描述
词云图:
在这里插入图片描述

处理中文的词云

实现处理中文的词云比较困难,因为分割中文比较麻烦,这就需要jieba模块来实现分割中文。
代码:

import jieba
import numpy as np
from PIL import Image
from wordcloud import wordcloud
import matplotlib

def gen_wordcloud(text, filename):
    # 1.切割和处理中文字符
    # 2).强调分割中有问题的词
    jieba.suggest_freq(('微博'), True)
    jieba.suggest_freq(('热搜'), True)

    # 1).难点:如何分割中文(jieba --> lcut)
    result = jieba.lcut(text)
    # print(result)

    # 2.打开图片,获取图片的数据信息
    imgObj = Image.open('./doc/wordcloud.jpg')
    img_mask = np.array(imgObj)

    # 3.创建词云对象,设置属性
    wcObj = wordcloud.WordCloud(
        mask=img_mask,
        background_color='snow',
        # fc-list :lang=zh linux命令行查看当前支持的中文
        # 指定字体库
        font_path='/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc',
        min_font_size=5,
        max_font_size=50,
        width=1000,
        height=1000
    )

    # 4.生成词云图片
    # 词云绘制时,默认只处理字符串类型
    # 怎么分割每个单词? ----> 必须以逗号分隔符分割
    wcObj.generate(','.join(result))
    wcObj.to_file(filename)
    print("生成图片%s成功......." %(filename))

if __name__ == '__main__':
    text = '马云曾公开表态称对钱没兴趣称其从来没碰过钱上了微博热搜'
    filename = "doc/text.png"
    gen_wordcloud(text, filename)

词云图(文字比较少,效果图不是很明显,也不太好看):
在这里插入图片描述

案例_对mooc课程信息词云分析

对之前爬取的mooc课程信息进行处理
代码:

import csv
import re
import numpy as np
import jieba
from PIL import Image
from wordcloud import wordcloud
import matplotlib


def dealCourseInfo(filename):
    wordcloudString = ''
    with open(filename) as f:
        reader = csv.reader(f)
        pattern = re.compile(r'([\u4e00-\u9fa5]+|[a-zA-Z0-9]+)')
        for item in reader:
            name = ''.join(re.findall(pattern,item[0]))
            detail = ''.join(re.findall(pattern,item[2]))
            wordcloudString += name
            wordcloudString += detail
        # print(wordcloudString)

        # 去掉你认为不重要的词
        return  re.sub(r'(学习|使用|入门|基础|实现|掌握)', '', wordcloudString)

def gen_wordcloud(text, filename):
    # 1.切割和处理中文字符
    # 2).强调分割中有问题的词
    jieba.suggest_freq(('微博'), True)
    jieba.suggest_freq(('热搜'), True)

    # 1).难点:如何分割中文(jieba --> lcut)
    result = jieba.lcut(text)
    # print(result)

    # 2.打开图片,获取图片的数据信息
    imgObj = Image.open('./doc/wordcloud.jpg')
    img_mask = np.array(imgObj)

    # 3.创建词云对象,设置属性
    wcObj = wordcloud.WordCloud(
        mask=img_mask,
        background_color='snow',
        # fc-list :lang=zh 查看当前支持的中文
        font_path='/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc',
        min_font_size=5,
        max_font_size=50,
        width=1000,
        height=1000
    )

    # 4.生成词云图片
    # 词云绘制时,默认只处理字符串类型
    # 怎么分割每个单词? ----> 必须以逗号分隔符分割
    wcObj.generate(','.join(result))
    wcObj.to_file(filename)
    print("生成图片%s成功......." %(filename))


if __name__ == '__main__':

    # 分析爬取的数据
    text = dealCourseInfo('doc/mooc.csv')
    filename = "doc/mooc.png"
    gen_wordcloud(text, filename)

词云图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/King15229085063/article/details/87789624