词云制作有很多工具
从技术上来看,词云是一种有趣的数据可视化方法,互联网上有很多的现成的工具:
Wordle是一个用于从文本生成词云图而提供的游戏工具
Tagxedo 可以在线制作个性化词云
Tagul 是一个 Web 服务,同样可以创建华丽的词云
Tagcrowd 还可以输入web的url,直接生成某个网页的词云
等等。
今天做了个生成词云的Demo。等等。
下面以获取胡歌《猎场》豆瓣影评为素材生成词云。思路如下:
第一步:我们需要先获取我们需要的文本资料。这里我选择去豆瓣上爬取评论。
第二步:将评论分词。然后实用词云库生产。
第三步:设置背景图片生成词云图。
首先安装所需库,安装依赖包。
pip install pillow pip install matplotlib pip install wordcloud pip install jieba |
完整代码如下:
文件1:获取豆瓣影评
#!/usr/bin/python
# _*_ coding:utf-8 _*_
# author: Robinn
import os
import requests
from goose import Goose
from bs4 import BeautifulSoup
#爬取胡歌豆瓣影评
def gethashlist(urllist):
commentlist = []
for url in urllist:
g = Goose()
article = g.extract(url=url)
soup = BeautifulSoup(article.raw_html,"html.parser")
comment_list = soup.find_all(class_="comment")
for comment in comment_list:
commentlist.append(comment.p.text)
return commentlist
if __name__ == "__main__":
pagenum = range(0, 2880, 20)
# pagenum = range(0, 20, 20)
pageList = []
for n in pagenum:
url = "https://movie.douban.com/subject/26322642/comments?start="+str(n)+"&limit=20&sort=new_score&status=P&percent_type="
pageList.append(url)
commentlist = gethashlist(pageList)
#爬取的胡歌影评保存huge.txt文件以备后续生成词云使用
with open("huge.txt","w") as f:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
for line in commentlist:
print(line)
f.write(line.strip()+"\n")
|
文件2:将影评生成词云图
#!/usr/bin/python
# _*_ coding:utf-8 _*_
# author:robinn
from wordcloud import WordCloud,ImageColorGenerator
from scipy.misc import imread
import matplotlib.pyplot as plt
import jieba
import os
#分析胡歌《猎场》短评,分词生成词云图
with open(u"huge.txt","r") as f:
#我们上面爬取的豆瓣评论保存在huge.txt文件中
filetxt = f.read()
text = jieba.cut(filetxt,cut_all=True)
txtstr = " ".join(text)
#设置词云字体
font_path = "FZGLJW.TTF"
#设置词云图背景图
back_coloring_path = "2.jpg"
back_coloring = imread(os.path.join(os.path.dirname(__file__)+"/", back_coloring_path))
#配置词云参数
wc = WordCloud(font_path=font_path,
background_color="#fff",
max_words=2000,
mask=back_coloring,
max_font_size=120,
random_state=15,
width=1000,
height=1200,
margin=1,
)
# wc = WordCloud()
my_wc = wc.generate(txtstr)
plt.figure()
#生成词云
plt.imshow(my_wc)
plt.axis("off")
plt.show()
wc.to_file("_1.jpg")
#根据背景图片生成词云颜色
image_colors = ImageColorGenerator(back_coloring)
plt.imshow(wc.recolor(color_func=image_colors))
plt.axis("off")
plt.show()
wc.to_file("_2.jpg")
#绘制背景图片为颜色的图片
# plt.figure()
# plt.imshow(back_coloring, cmap=plt.cm.gray)
# plt.axis("off")
|
效果图如下:


在实际分析生成词云图的过程中。可能比这个要复杂一些。比如加入jieba词库,去除停用词,使用用户字典等。
详细代码看上面。以上仅供大家参考。