主要库:wordcloud,jieba,matplotlib
本例子实现制作一个网页内容的词云
注意,如果中文词云出现乱码,可以根据下面的博客介绍内容进行操作:
https://blog.youkuaiyun.com/Dick633/article/details/80261233
参考文章:http://liyangbit.com/nltk/nltk-yidaiyilu/
代码中出现的图片timg.jpg
是直接在百度图片上找到的中国地图。
下面直接贴上代码,已有详细注释
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 5 12:56:01 2018
@author: kindy
本例子实现制作一个网页内容的词云
注意,如果中文词云出现乱码,可以根据下面的博客介绍内容进行操作:
https://blog.youkuaiyun.com/Dick633/article/details/80261233
参考文章:http://liyangbit.com/nltk/nltk-yidaiyilu/
"""
## 0、导入相关包
import jieba
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import os
import PIL.Image as Image
import numpy as np
import requests
from bs4 import BeautifulSoup
## 1、需要分析的网页
url_2018 = 'http://www.gov.cn/xinwen/2018-03/22/content_5276608.htm'
## 2、构造提取网页内容以及使用jieba分词相关函数
def extract_text(url):
"""
url: 传入的网页地址
Extract html content.抽取html网页内容
"""
page_source = requests.get(url).content
bs_source = BeautifulSoup(page_source,'lxml')
report_text = bs_source.find_all('p')
text = ''
for p in report_text:
text += p.get_text()
text += '\n'
return text
## 3、首先使用 jieba 中文分词工具进行分词
text =extract_text(url_2018) # 这一步可以自己输入需要制作词云的文本
wordlist = jieba.cut(text, cut_all=False) # cut_all, True为全模式,False为精确模式
wordlist_space_split = ' '.join(wordlist)
## 4、使用WordCloud词云
d = os.path.dirname(__file__) # 获取当前路径
alice_coloring = np.array(Image.open(os.path.join(d,'timg.jpg'))) # 打开一幅图片,图片形状就是词云的形状
# 简单介绍WorCloud的参数:
# background_color: 背景颜色,可以是16进制形式,如 #ffffff
# mask :就是自己生成的词云想要哪种形状,就是前面打开的图片内容里的形状
# max_words: 最大词数,即最多显示多少词
# max_font_size:最大字体大小
my_wordcloud = WordCloud(background_color='white', max_words=100, mask=alice_coloring,
max_font_size=300, random_state=42).generate(wordlist_space_split)
image_colors = ImageColorGenerator(alice_coloring) # 词云的颜色是根据蒙版图片里的颜色生成的
plt.show(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud) # 以图片的形式显示词云
plt.axis('off') # 关闭坐标轴
plt.show()
## 5、保存词云图片
#my_wordcloud.to_file(os.path.join(d, 'words_cloud.png'))
结果如图: