【案例】Python生成词云

一、案例说明

通过对CVPR2018的论文标题的单词进行统计,利用词云进行可视化,来分析当年的研究热点词汇。

目标网站为http://openaccess.thecvf.com/CVPR2018.py

二、具体步骤

2.1 爬虫准备数据

首先通过爬虫爬取CVPR官网上的论文标题以及作者的名字,得到初始的数据。

然后将得到的数据进行预处理,得到我们想要的数据。步骤如下:

首先观察目标网站的数据格式,查看网页源代码,定位到我们需要的论文标题和作者的数据,通过requests库发送请求,得到网页文本,然后用BeautifulSoup库来解析网页文本的标签对,得到我们要的数据,并返回列表。

代码如下:

import requests
from bs4 import BeautifulSoup
from collections import Counter

# 抓取数据
r = requests.get('http://openaccess.thecvf.com/CVPR2018.py')

soup = BeautifulSoup(r.text, 'html.parser')
paper_list = soup.find_all('dt', attrs={'class': 'ptitle'})
author_list = soup.find_all('form', attrs={'class': 'authsearch'})

papers = 0
authors = 0

title = ""
for paper in paper_list:
    papers += 1
    title += ' '
    title += paper.a.text

print("论文总数", papers)

authorList = []
for author in author_list:
    authors += 1
    authorList.append(author.a.text)

print("作者人数", authors)

2.2 数据处理

数据处理的话可以把所有标题串起来,直接生成一个字符串,放到文本文件中,给后面的词云函数提供材料。

也可以先自行统计好词频,然后将列表给到词云的函数,这两个对应到词云的不同方法。

这里我采用第一种方法,步骤如下:

  1. 去掉标题中的 ‘ :’ ,避免对单词的统计造成错误,如果不去掉冒号,那么对于一些单词来说,加了冒号和不加冒号的单词会被按照两个单词来统计。这个操作可以通过replace()方法将冒号替换为空字符串。。
  2. 将论文标题组成字符串,为后面生成词云提供原材料。
title = title.replace(':', '')

def save(filename, contents):
    fh = open(filename, 'w', encoding="utf-8") 
    fh.write(contents) 
    fh.close() 

save('title.txt', title) 

2.3 数据可视化(生成词云)

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt
from scipy.misc import imread

text = open('title.txt').read()

#读入背景图片
pic = imread('CVPR.png')

#生成词云
w = WordCloud(font_path = 'CabinSketch-Bold.ttf', margin = 1, mask=pic, background_color='white', max_words=2000, 
              stopwords=STOPWORDS.add('for'),max_font_size=70, scale = 32)
w.generate(text)

#从背景图片生成颜色值
image_colors = ImageColorGenerator(pic)

#显示词云图片
plt.imshow(w)
plt.axis('off')
plt.show()

#保存图片

w.to_file('wordcloud.png')

生成词云的函数的部分参数如下:

font_path是选择展示的字体,我这里采用的是CabinSketch—Bold.ttf。

margin是单词之间的距离,可以使图片看起来更紧凑。

mask是选择哪张图片作为词云的形状,让图片更加有趣。

max_words表示展示的最大单词数,可以自由选择以展示不同的效果。

max_font_size表示最大的单词的字体大小,这样可突出显示频次高的单词。

scale表示生成图片的精度,越大图片质量越高。

这里采用CVPR背景图,生成的词云图片如下:

如果觉得有用不妨点个赞支持一下哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章