一、案例说明
通过对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 数据处理
数据处理的话可以把所有标题串起来,直接生成一个字符串,放到文本文件中,给后面的词云函数提供材料。
也可以先自行统计好词频,然后将列表给到词云的函数,这两个对应到词云的不同方法。
这里我采用第一种方法,步骤如下:
- 去掉标题中的 ‘ :’ ,避免对单词的统计造成错误,如果不去掉冒号,那么对于一些单词来说,加了冒号和不加冒号的单词会被按照两个单词来统计。这个操作可以通过replace()方法将冒号替换为空字符串。。
- 将论文标题组成字符串,为后面生成词云提供原材料。
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背景图,生成的词云图片如下:
如果觉得有用不妨点个赞支持一下哦~