天天看點

Python案例實操2-詞雲生成

Python案例實操2-詞雲生成

案例2:根據案例1爬取到的豆瓣電影Top250資料,将電影的一句話概述資訊,生成一個詞雲圖檔

顯示效果如圖所示:

Python案例實操2-詞雲生成

使用到的技術子產品

  • wordcloud 詞雲處理
  • jieba 分詞
  • matplotlib 繪圖, 資料可視化
  • PIL.Image 圖檔處理
  • numpy 矩陣運算
  • sqlite3 資料庫連接配接
  1. 準備詞雲所需的文字,從moive表中查找所有電影的一句話描述,拼接成字元串
conn = sqlite3.connect("movie.db")
cur = conn.cursor()
sql = "select desc from movie"
data = cur.execute(sql)
text = ""
for item in data:
    text = text + item[0]
cur.close()
conn.close()
           
  1. 使用jieba分詞
# 分詞
cut = jieba.cut(text)
str = " ".join(cut)
print("分詞個數:", len(str))
           
  1. 中文分詞裡,不能直接使用wordcloud中的STOPWRODS,需要單獨配置中文停用詞,可以從網上複制下載下傳
# 設定中文停用詞 從檔案中讀取屏蔽詞
stopwords = set()
content = [line.strip() for line in open(r'static/txt/stopwords.txt', 'r', encoding="utf-8").readlines()]
stopwords.update(content)
           
  1. 設定詞雲的遮罩圖檔
# 設定遮罩圖檔
img = Image.open(r'./static/assets/img/tree.jpg')  # 打開遮罩圖檔,圖檔背景為白色
img_arr = np.array(img)  # 将圖檔轉為數組格式
           

遮罩圖檔可以随意,注意背景為白色即可

Python案例實操2-詞雲生成
  1. 封裝詞雲
# 封裝詞雲
wc = WordCloud(
    background_color="white",
    mask=img_arr,
    font_path="simkai.ttf",  # 字型 C:\Windows\Fonts
    stopwords=stopwords  # 過濾停用詞
)
wc.generate_from_text(str)
           
  1. 繪制圖檔
# 繪制圖檔
fig = plt.figure(1)
plt.imshow(wc)
plt.axis("off")  # 是否顯示坐标軸
# plt.show()  # 顯示生成的詞雲圖檔
# 輸出詞雲圖檔到檔案 預設dpi為400
plt.savefig(r'./static/assets/img/word.jpg', dpi=450)
           
  1. 運作程式,生成jpg圖檔,大功告成.
  2. 附上完整代碼 test_wordcloud.py
import jieba  # 分詞
import matplotlib.pyplot as plt  # 繪圖, 資料可視化
from wordcloud import WordCloud  # 詞雲
from PIL import Image  # 圖檔處理
import numpy as np  # 矩陣運算
import sqlite3

# 準備詞雲所需的文字
conn = sqlite3.connect("movie.db")
cur = conn.cursor()
sql = "select desc from movie"
data = cur.execute(sql)
text = ""
for item in data:
    text = text + item[0]
cur.close()
conn.close()

# 分詞
cut = jieba.cut(text)
str = " ".join(cut)
print("分詞個數:", len(str))

# 設定中文停用詞 從檔案中讀取屏蔽詞
stopwords = set()
content = [line.strip() for line in open(r'static/txt/stopwords.txt', 'r', encoding="utf-8").readlines()]
stopwords.update(content)

# 設定遮罩圖檔
img = Image.open(r'./static/assets/img/tree.jpg')  # 打開遮罩圖檔,圖檔背景為白色
img_arr = np.array(img)  # 将圖檔轉為數組格式

# 封裝詞雲
wc = WordCloud(
    background_color="white",
    mask=img_arr,
    font_path="simkai.ttf",  # 字型 C:\Windows\Fonts
    stopwords=stopwords  # 過濾停用詞
)
wc.generate_from_text(str)

# 繪制圖檔
fig = plt.figure(1)	# 建立畫布
plt.imshow(wc)
plt.axis("off")  # 是否顯示坐标軸
# plt.show()  # 顯示生成的詞雲圖檔
# 輸出詞雲圖檔到檔案 預設dpi為400
plt.savefig(r'./static/assets/img/word.jpg', dpi=450)

           

本案例資料是案例1中通過網絡爬蟲擷取到的資料

Python案例實操1-網絡爬蟲