#Python系列#--自然语言处理之wordcloud+jieba生成词云图

user

雨橙

中国.四川.成都

世界之上、唯有远见、惟爱不变。


词云制作有很多工具
从技术上来看,词云是一种有趣的数据可视化方法,互联网上有很多的现成的工具:
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词库,去除停用词,使用用户字典等。

详细代码看上面。以上仅供大家参考。
 
posted at