iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

python-資料分析與機器學習系列 第 23

DAY23-自然語言處理(wordcloud模組)

  • 分享至 

  • xImage
  •  

WordCloud 是一個用於創建文字雲的Python模組,它可以將一個文本中的單詞按照它們在文本中的頻率產生一個視覺化的圖示。文字雲通常用於視覺化文本數據中的關鍵詞或主題,以便理解文本的重點內容。

接下來實做一個新聞網文字雲

import requests
from bs4 import BeautifulSoup as soup
from PIL import Image
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba
import numpy as np
from collections import Counter

取得聯合報(UDN)新聞網站上的新聞連結

urls = []
url = 'https://udn.com/news/breaknews/1'  #聯合報新聞
html = requests.get(url)  # 發送 HTTP 請求以獲取網頁內容
sp = soup(html.text, 'html.parser')  #解析 HTML 內容
data1 = sp.select('#breaknews_body dl dt h2 a')  # 使用 CSS 選擇器選擇符合條件的元素
for d in data1:  #取得新聞連結
    urls.append('https://udn.com' + d.get('href'))

取得新聞內容

text_news = ''  # 初始化一個空字符串,用於存儲新聞內容
i = 1
#利用迴圈逐一獲取新聞內容
for url in urls:  
    html = requests.get(url)
    sp = soup(html.text, 'html.parser')
    data1 = sp.select('#story_body_content p')  #新聞內容
    print('處理第 {} 則新聞'.format(i))
    for d in data1:
        if d.text.find('延伸閱讀') != -1:  #遇到延伸閱讀就結束此則新聞
            break
        if d.text != '':  # 若文本不為空,將其添加到 text_news 變數中
            text_news += d.text
    i += 1

排除停用詞

jieba.set_dictionary('/content/dict.txt.big.txt')# 設定jieba分詞器使用繁體中文詞典
with open('/content/stopWord_union.txt', 'r', encoding='utf-8-sig') as f:  #設定停用詞
    stops = f.read().split('\n')   
terms = []  #儲存字詞
for t in jieba.cut(text_news, cut_all=False):  #拆解句子為字詞,並排除停用詞
    if t not in stops:  #不是停用詞
        terms.append(t)

設定文字雲

diction = Counter(terms)  #創建詞頻字典

font = r'msyh.ttc'  #設定字型
mask = np.array(Image.open("heart.png"))  #設定文字雲形狀 
unioncloud = WordCloud(background_color="white",mask=mask,font_path=font)  #背景顏色預設黑色,改為白色 
unioncloud.generate_from_frequencies(frequencies=diction)  #產生文字雲

產生圖片

plt.figure(figsize=(6,6))
plt.imshow(unioncloud)
plt.axis("off")
plt.show()

unioncloud.to_file("uni_Wordcloud.png")  #存檔

---20231008---


上一篇
DAY22-自然語言處理(jieba模組)
下一篇
DAY24-股票走勢分析(上)
系列文
python-資料分析與機器學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言