【案例】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背景圖,生成的詞雲圖片如下:

如果覺得有用不妨點個贊支持一下哦~

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