close

【wordcloud】用python繪製文字雲:抓取yahoo新聞用jieba+wordcloud繪製自己的文字雲 看完文章5分鐘馬上會寫code

一、前言

抓取yahoo新聞用jieba+wordcloud繪製自己的文字雲,case by case全面解析!

wordcloud怎麼設定字體、wordcloud如何設定mask、wordcloud常用參數快速繪製雲字雲!

上一篇說到 【jieba】Python如何用jieba來對文字分詞?看完文章馬上會寫code!

先到yahoo新聞抓取一篇文章某段內文,後後進行分詞及出現次數統計。

最後就是繪製出自己的文字雲,然後舉一反三嘍!我們就開始吧!

 

進入基本教學前,不要忘了訂閱按讚分享唷!

部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ

 

 

二、抓取新聞並繪製成文字雲


最下面同樣附整可以執行的完整程式碼懶人包,趕時間的人可以趕快速成!!

這邊我們先了解wordcloud己的重要參數及如何快速輸出文字雲!下面是快速繪製基本用法。

from PIL import Image # 圖片轉array陣列
import matplotlib.pyplot as plt
import wordcloud # 文字雲

# 格式設定
font_path = 'SNsanafonMugiV260.ttf' # 設定字體格式
mask = numpy.array(Image.open('1200px-TSMC.svg.png')) # 遮罩
mask=(mask==0)*255 # 把舉證等於0的地方變成255 原本有數字的地方變0

wc = wordcloud.WordCloud(background_color='white',
                         margin=2, # 文字間距
                         mask=mask, # 遮罩 有用的話則無視設定長寬
                         font_path=font_path, # 設定字體
                         max_words=200, # 取多少文字在裡面
                         width=1080, height=720, # 長寬解析度
                         relative_scaling=0.5 # 詞頻與詞大小關聯性
                         )
# 生成文字雲
wc.generate_from_frequencies(dictionary) # 吃入次數字典資料

# 輸出
wc.to_file('my_wordcloud.png')

# 顯示文字雲
plt.imshow(wc)

font_path 是字體ttf檔,可以上網下載免費的來用,不然顯示不出中文唷!

mask 需要注意匯入轉為array後0的地方是要出現文字雲文字的地方,有值的地方則不顯示

我用的是台積電的logo.png檔,給大家參考下 來自wiki

兩個檔案都要放在工作路徑之下唷!不然絕對位置要寫好。

1200px-TSMC.svg

 

一鍵輸出結果如下!

my_wordcloud

完整程式碼

import pandas, numpy
import requests # 訪問
from bs4 import BeautifulSoup # 網頁解析
import jieba
from collections import Counter # 次數統計

# 抓取yahoo新聞的某篇某段當範例
url = 'https://tw.news.yahoo.com/%E6%99%B6%E5%9C%93%E5%BB%A0%E6%89%8D%E6%98%AF%E7%9C%9F%E6%AD%A3%E7%9A%84%E9%87%91%E9%9B%9E%E6%AF%8D-%E6%A5%8A%E6%87%89%E8%B6%85%E7%82%BA%E8%8B%B1%E7%89%B9%E7%88%BE%E7%B7%A9%E9%A0%B0-%E4%BB%A3%E5%B7%A5%E7%9A%84%E5%8F%B0%E7%A9%8D%E9%9B%BB%E6%80%8E%E9%BA%BC%E8%BE%A6-114410893.html'
re = requests.get(url)
soup = BeautifulSoup(re.text, 'html.parser')
texts = soup.find_all('p', class_='M(0)')
text = texts[0].text

# 設定分詞資料庫
# https://raw.githubusercontent.com/fxsjy/jieba/master/extra_dict/dict.txt.big 右鍵另存放目錄下
jieba.set_dictionary('dict.txt.big.txt')

# 將自己常用的詞加入字典
jieba.load_userdict('finance_dict.txt')

# 新增及刪除常用詞
jieba.add_word('英特爾') # 加入英特爾
jieba.add_word('美元') # 加入英特爾
jieba.del_word('元') # 刪除電風扇

# 斷句方式
# 用jieba.lcut(text, cut_all=False)直接返回list
segs = jieba.cut(text, cut_all=True) # 全切模式 切的很碎
segs = jieba.cut(text, cut_all=False) # 預設模式
seg_list = jieba.lcut(text, cut_all=False) # lcut直接返回list

# 統計分詞出現次數
dictionary = Counter(seg_list)

# 移除停用詞
stopword = [' ', ',', '(', ')', '...', '。', '「', '」']  # 定義停用詞
[dictionary.pop(x, None) for x in stopword] # 存字典裡刪除停用詞

# 產生文字雲
from PIL import Image # 圖片轉array陣列
import matplotlib.pyplot as plt
import wordcloud # 文字雲

# 格式設定
font_path = 'SNsanafonMugiV260.ttf' # 設定字體格式
mask = numpy.array(Image.open('1200px-TSMC.svg.png')) # 遮罩
mask=(mask==0)*255 # 把舉證等於0的地方變成255 原本有數字的地方變0

wc = wordcloud.WordCloud(background_color='white',
                         margin=2, # 文字間距
                         mask=mask, # 遮罩 有用的話則無視設定長寬
                         font_path=font_path, # 設定字體
                         max_words=200, # 取多少文字在裡面
                         width=1080, height=720, # 長寬解析度
                         relative_scaling=0.5 # 詞頻與詞大小關聯性
                         )
# 生成文字雲
wc.generate_from_frequencies(dictionary) # 吃入次數字典資料

# 輸出
wc.to_file('my_wordcloud.png')

# 顯示文字雲
plt.imshow(wc)

 

三、後記


這樣一來就可以把多個新聞網站的標題或是內文全部彙整起來,每天下班一個按鈕就可以知道今天在熱什麼了。

換個想法不知道用愛心文字雲告白成功機會高不高齁!!科科

 

進入基本教學前,不要忘了訂閱按讚分享唷!

部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ

arrow
arrow

    恩哥Python 發表在 痞客邦 留言(0) 人氣()