如何用Python 製做詞雲-對1000首古詩作詞雲分析

公號:碼農充電站pro
主頁:https://codeshellme.github.iohtml

在這裏插入圖片描述

今天來介紹一下如何使用 Python 製做詞雲python

詞雲又叫文字雲,它能夠統計文本中頻率較高的詞,並將這些詞可視化,讓咱們能夠直觀的瞭解文本中的重點詞彙。git

詞的頻率越高,詞顯示的大小也就越大。github

1,wordcloud 模塊

wordcloud 是一個詞雲生成器,它不只是一個 Python 庫,仍是一個命令行工具。咱們能夠經過 wordcloud 官方文檔,和示例庫來學習如何使用它。算法

在使用 wordcloud 以前,須要先安裝它:shell

pip install wordcloud

2,WordCloud 類

WordCloud 類用於建立詞雲對象,先來看下它的原型:app

WordCloud(font_path=None, 
  width=400, height=200, 
  margin=2, ranks_only=None, 
  prefer_horizontal=0.9, 
  mask=None, scale=1, 
  color_func=None, max_words=200, 
  min_font_size=4, stopwords=None, 
  random_state=None, 
  background_color='black', 
  max_font_size=None, 
  font_step=1, mode='RGB', 
  relative_scaling='auto', 
  regexp=None, collocations=True, 
  colormap=None, normalize_plurals=True, 
  contour_width=0, contour_color='black', 
  repeat=False, include_numbers=False, 
  min_word_length=0, 
  collocation_threshold=30)

能夠看到,WordCloud 類有不少參數能夠設置,這裏介紹一些經常使用的參數:dom

  • font_path:設置字體文件路徑,字體文件以 .ttf 爲後綴。
    • 若是分析的文本是中文,則須要設置中文字體,不然會亂碼。
  • background_color:設置圖片背景顏色,默認爲 black,也能夠設置爲 white 等。
  • mask:設置背景圖片。
  • max_words:設置最大的詞數,默認爲200。
  • stopwords:設置停用詞。
  • max_font_size:設置字體最大值。
  • width:設置畫布的寬度,默認爲400。
  • height:設置畫布的高度,默認爲200。
  • random_state:設置多少種隨機狀態,即多少種顏色。

在建立好詞雲對象後,可使用 generate 方法生成詞雲,並使用 to_file 方法將詞雲圖像保存在文件中。工具

generate 方法的原型以下:學習

generate(text)

參數text 是一個用空格隔開的文本字符串。若是分析的是中文,須要先用 jieba 進行分詞,能夠參考這裏

除了將詞雲圖像保存在文件中,還可使用 Matplotlib 模塊顯示詞雲圖像,示例代碼以下:

import matplotlib.pyplot as plt

plt.imshow(wordcloud)  # wordcloud 是詞雲對象
plt.axis("off")        # 用於關閉座標軸
plt.show()

3,一個簡單的示例

下面演示一個最簡單的示例,來看如何使用 wordcloud

首先建立詞雲對象

from wordcloud import WordCloud
wc = WordCloud()

生成詞雲:

text = "Python is a programming language, it is easy to use."
wc.generate(text)

詞雲對象的 words_ 屬性中存儲了每一個單詞的(歸一化後的)權重,權重的範圍是 (0, 1]

words_ 屬性是一個字典類型,它存儲的鍵的最大個數爲 max_words,即 WordCloud 類的參數。

以下:

>>> wc.words_
{'Python': 1.0, 'programming': 1.0, 'language': 1.0, 'easy': 1.0, 'use': 1.0}
# 示例中的這些單詞出現的頻率都相等(均爲 1),
# 因此它們的權重都是 1。

Matplotlib 展現詞雲圖像:

import matplotlib.pyplot as plt

plt.imshow(wc) 
plt.axis("off")
plt.show()

詞雲圖像以下:

在這裏插入圖片描述

4,對古詩作詞雲分析

我在這裏準備了一個案例,是對1000 首古詩作詞雲分析。

代碼目錄以下:

wordcloud/
├── SimHei.ttf
├── gushi.txt
└── gushi_wordcloud.py

其中:

  • SimHei.ttf:是一個字體文件,避免詞雲分析時出現中文亂碼。
  • gushi.txt:該文件中包含了1000 首古詩
  • gushi_wordcloud.py:是詞雲分析代碼

我將代碼也放在這裏,方便查看:

#!/usr/bin/env python
# coding=utf-8

import os
import sys
import jieba
from wordcloud import WordCloud

if sys.version.startswith('2.'):
    reload(sys)
    sys.setdefaultencoding('utf-8')

# 去掉一些做者的名字
STOPWORDS = [
        u'李白', u'杜甫', u'辛棄疾', u'李清照', u'蘇軾',
        u'李商隱', u'王維', u'白居易', u'李煜', u'杜牧',
        ]

def load_file(file_path):
    if sys.version.startswith('2.'):
        with open(file_path) as f:
            lines = f.readlines()
    else:
        with open(file_path, encoding='utf-8') as f:
            lines = f.readlines()

    content = ''

    for line in lines:
        line = line.encode('unicode-escape').decode('unicode-escape')
        line = line.strip().rstrip('\n')

        content += line

    words = jieba.cut(content)

    l = []
    for w in words:
        # 若是詞的長度小於 2,則捨去
        if len(w) < 2: continue

        l.append(w)

    return ' '.join(l)


if __name__ == '__main__':
    file_path = './gushi.txt'
    content = load_file(file_path)

    wc = WordCloud(
            font_path="./SimHei.ttf",
            stopwords=STOPWORDS,
            width=2000, height=1200)

    wc.generate(content)
    wc.to_file("wordcloud.jpg")

其中:

  • STOPWORDS 停用詞列表,是一些做者的名字。
  • load_file 方法用於加載文本,其中用到了 jieba 分詞。

最後將詞雲圖像保存在了 wordcloud.jpg 文件中,以下:

在這裏插入圖片描述

咱們也能夠從詞雲對象的words_ 屬性中查看每一個詞的權重,這裏我列出前十個:

('明月', 1.0)
('今日', 0.9130434782608695)
('不知', 0.8405797101449275) 
('何處', 0.8260869565217391) 
('不見', 0.8115942028985508) 
('春風', 0.7536231884057971) 
('無人', 0.7536231884057971) 
('不可', 0.7536231884057971) 
('萬里', 0.7536231884057971) 
('現代', 0.6666666666666666)

(本節完。)


推薦閱讀:

如何使用Python 進行數據可視化

Apriori 算法-如何進行關聯規則挖掘

PageRank 算法-Google 如何給網頁排名

K 均值算法-如何讓數據自動分組

KNN 算法-實戰篇-如何識別手寫數字


歡迎關注做者公衆號,獲取更多技術乾貨。

碼農充電站pro

相關文章
相關標籤/搜索