天天看點

【NLP開發】Python實作詞雲圖

文章目錄

  • ​​1、NLP​​
  • ​​1.1 NLP定義​​
  • ​​1.2 NLP研究方向​​
  • ​​2 詞雲圖​​
  • ​​2.1 wordcloud​​
  • ​​2.1.1 安裝​​
  • ​​2.1.2 wordcloud例子​​
  • ​​2.1.3 wordcloud+jieba例子​​
  • ​​2.1.4 wordcloud+jieba+自定義形狀例子​​
  • ​​2.2 pyecharts​​
  • ​​2.2.1 安裝​​
  • ​​2.2.2 入門例子​​
  • ​​2.2.3 WordCloud例子一​​
  • ​​2.2.4 WordCloud例子二​​
  • ​​2.2.5 WordCloud例子三​​
  • ​​2.3 stylecloud​​
  • ​​2.3.1 安裝​​
  • ​​2.3.2 測試例子​​
  • ​​結語​​

1、NLP

1.1 NLP定義

自然語言處理 (Natural Language Processing) 是人工智能(AI)的一個子領域。自然語言處理(NLP)就是在機器語言和人類語言之間溝通的橋梁,以實作人機交流的目的。

【NLP開發】Python實作詞雲圖

1.2 NLP研究方向

  • 資訊抽取:從給定文本中抽取重要的資訊,比如時間、地點、人物、事件、原因、結果、數字、日期、貨币、專有名詞等等。通俗說來,就是要了解誰在什麼時候、什麼原因、對誰、做了什麼事、有什麼結果。
  • 文本生成:機器像人一樣使用自然語言進行表達和寫作。依據輸入的不同,文本生成技術主要包括資料到文本生成和文本到文本生成。資料到文本生成是指将包含鍵值對的資料轉化為自然語言文本;文本到文本生成對輸入文本進行轉化和處理進而産生新的文本。
  • 問答系統:對一個自然語言表達的問題,由問答系統給出一個精準的答案。需要對自然語言查詢語句進行某種程度的語義分析,包括實體連結、關系識别,形成邏輯表達式,然後到知識庫中查找可能的候選答案并通過一個排序機制找出最佳的答案。
  • 對話系統:系統通過一系列的對話,跟使用者進行聊天、回答、完成某一項任務。涉及到使用者意圖了解、通用聊天引擎、問答引擎、對話管理等技術。此外,為了展現上下文相關,要具備多輪對話能力。
  • 文本挖掘:包括文本聚類、分類、情感分析以及對挖掘的資訊和知識的可視化、互動式的表達界面。目前主流的技術都是基于統計機器學習的。
【NLP開發】Python實作詞雲圖
  • 語音識别和生成:語音識别是将輸入計算機的語音符号識别轉換成書面語表示。語音生成又稱文語轉換、語音合成,它是指将書面文本自動轉換成對應的語音表征。
  • 資訊過濾:通過計算機系統自動識别和過濾符合特定條件的文檔資訊。通常指網絡有害資訊的自動識别和過濾,主要用于資訊安全和防護,網絡内容管理等。
  • 輿情分析:是指收集和處理海量資訊,自動化地對網絡輿情進行分析,以實作及時應對網絡輿情的目的。
  • 資訊檢索:對大規模的文檔進行索引。可簡單對文檔中的詞彙,賦之以不同的權重來建立索引,也可建立更加深層的索引。在查詢的時候,對輸入的查詢表達式比如一個檢索詞或者一個句子進行分析,然後在索引裡面查找比對的候選文檔,再根據一個排序機制把候選文檔排序,最後輸出排序得分最高的文檔。
  • 機器翻譯:把輸入的源語言文本通過自動翻譯獲得另外一種語言的文本。機器翻譯從最早的基于規則的方法到二十年前的基于統計的方法,再到今天的基于神經網絡(編碼-解碼)的方法,逐漸形成了一套比較嚴謹的方法體系。

2 詞雲圖

“詞雲”由美國西北大學新聞學副教授、新媒體專業主任裡奇·戈登(Rich Gordon)于2006年最先使用。

詞雲圖的構成元素是詞彙、顔色、圖形、大小,其中顔色代表了不同的詞彙,它通過顔色深淺、氣泡大小等容易判斷度量的大小,以關鍵詞字型的大小直接展示資料的數值大小,使圖表具有直覺、有趣的效果。它可以過濾掉源文本中大量的無用資訊,使讀者隻要一眼掃過文本就可以讀懂報告的主要内容。

2.1 wordcloud

2.1.1 安裝

  • 安裝詞雲的第三方庫
pip install wordcloud
or
pip install      

2.1.2 wordcloud例子

  • 使用wordcloud進行測試
import matplotlib.pyplot as plt
import wordcloud

# 資料擷取
with open("d:\西遊記.txt", 'r', encoding='gbk')as f:
    text = f.read()
    
wc = wordcloud.WordCloud(background_color="white",
                         font_path="C:\\Windows\\Fonts\\simhei.ttf", 
                         width=500, height=500)
wc.generate(text)
wc.to_file("pywcloud.png")

fig = plt.figure()
# 設定視窗标題
# fig.canvas.set_window_title("愛看書的小沐")
# fig.canvas.manager.window.setWindowTitle("愛看書的小沐")
fig.canvas.manager.window.title("西遊記的詞雲 - 愛看書的小沐")

plt.imshow(wc, interpolation='catrom')
plt.axis('off')
plt.show()      
【NLP開發】Python實作詞雲圖

2.1.3 wordcloud+jieba例子

  • 使用wordcloud+jieba進行測試
import matplotlib.pyplot as plt
import jieba
import wordcloud

# 提取資料
with open("d:\西遊記.txt", 'r', encoding='gbk')as f:
    text = f.read()

wc = wordcloud.WordCloud(
    font_path="C:\\Windows\\Fonts\\simhei.ttf", 
    width=500, height=500)
wc.generate(" ".join(jieba.lcut(text)))
wc.to_file("wc.png")

fig = plt.figure()
fig.canvas.manager.window.title("西遊記的詞雲 - 愛看書的小沐")

plt.imshow(wc, interpolation='catrom')
plt.axis('off')
plt.show()      
【NLP開發】Python實作詞雲圖

2.1.4 wordcloud+jieba+自定義形狀例子

  • 使用wordcloud+jieba+各種形狀進行測試
import matplotlib.pyplot as plt
import jieba
import wordcloud
from PIL import Image
import numpy as np

# 資料擷取
with open("d:\西遊記.txt", 'r', encoding='gbk')as f:
    text = f.read()

font = r'C:\Windows\Fonts\simhei.ttf'
sep_list = jieba.lcut_for_search(text)
sep_list = " ".join(sep_list)
wc = wordcloud.WordCloud(
    scale=5,          # 調整圖檔大小
    font_path=font,   # 使用的字型庫
    max_words=100,    # 詞雲顯示的最大詞數
    margin=1,         # 字型之間的間距
    mask=np.array(Image.open("d:\heart.png")),  # 背景圖檔
    background_color='white',                   # 背景顔色
    max_font_size=200,
    # min_font_size=1,
    # stopwords=STOPWORDS,                      #屏蔽的内容
    collocations=False,                         # 避免重複單詞
    width=1000, height=1000                     # 圖像寬高,字間距
)

wc.generate(sep_list)
wc.to_file("wc.png")

fig = plt.figure()
fig.canvas.manager.window.title("西遊記的詞雲 - 愛看書的小沐")
plt.imshow(wc, interpolation='catrom')
plt.axis('off')
plt.show()      
【NLP開發】Python實作詞雲圖
【NLP開發】Python實作詞雲圖
【NLP開發】Python實作詞雲圖
【NLP開發】Python實作詞雲圖
【NLP開發】Python實作詞雲圖
【NLP開發】Python實作詞雲圖
【NLP開發】Python實作詞雲圖
【NLP開發】Python實作詞雲圖

2.2 pyecharts

​​https://pyecharts.org/#/​​

Echarts 是一個由百度開源的資料可視化,憑借着良好的互動性,精巧的圖表設計,得到了衆多開發者的認可。而 Python 是一門富有表達力的語言,很适合用于資料處理。當資料分析遇上資料可視化時,pyecharts 誕生了。

pyecharts是基于echarts的python庫,能夠繪制多種互動式圖表,和其他可視化庫不一樣,pyecharts支援鍊式調用。也就是說添加圖表元素、修改圖表配置,隻需要簡單的調用元件即可。

【NLP開發】Python實作詞雲圖

2.2.1 安裝

  • (1)pip 安裝:
pip(3) install      
【NLP開發】Python實作詞雲圖
  • (2)源碼安裝:
$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
# 或者執行 python install.py      

2.2.2 入門例子

  • 代碼如下:
from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 會生成本地 HTML 檔案,預設會在目前目錄生成 render.html 檔案
# 也可以傳入路徑參數,如 bar.render("mycharts.html")
bar.render()      
  • 運作結果如下:
  • 【NLP開發】Python實作詞雲圖

2.2.3 WordCloud例子一

  • 代碼如下:
import pyecharts.options as opts
from pyecharts.charts import WordCloud

data = [
    ("愛看書的小沐", "999"),
    ("愛發呆的戈戈", "888"),
    ("供氣品質", "777"),
    ("生活用水管理", "688"),
    ("一次供水問題", "588"),
    ("交通運輸", "516"),
    ("城市交通", "515"),
    ("環境保護", "483"),
    ("房地産管理", "462"),
    ("城鄉建設", "449"),
    ("社會保障", "407"),
    ("文體與教育管理", "406"),
    ("公共安全", "406"),
    ("公交運輸管理", "386"),
    ("計程車營運管理", "385"),
    ("供熱管理", "375"),
    ("市容環衛", "355"),
    ("自然資源管理", "355"),
    ("粉塵污染", "335"),
    ("噪聲污染", "324"),
    ("土地資源管理", "304"),
    ("物業服務與管理", "304"),
    ("醫療衛生", "284"),
    ("粉煤灰污染", "284"),
    ("占道", "284"),
    ("供熱發展", "254"),
    ("農村土地規劃管理", "254"),
    ("生活噪音", "253"),
    ("供熱機關影響", "253"),
    ("城市供電", "223"),
    ("房屋品質與安全", "223"),
    ("瓦斯管理", "152"),
    ("教育管理", "152"),
    ("縣區、開發區", "152"),
    ("宏觀經濟", "152"),
    ("教育管理", "112"),
    ("社會保障", "112"),
    ("生活用水管理", "112"),
    ("物業服務與管理", "112"),
    ("分類清單", "112"),
    ("農業生産", "112"),
    ("二次供水問題", "112"),
    ("城市公共設施", "92"),
    ("拆遷政策咨詢", "92"),
    ("物業服務", "92"),
    ("物業管理", "92"),
    ("社會保障保險管理", "92"),
    ("低保管理", "92"),
    ("文娛市場管理", "72"),
    ("城市交通秩序管理", "72"),
    ("執法争議", "72"),
    ("商業煙塵污染", "72"),
    ("占道堆放", "71"),
    ("地上設施", "71"),
    ("水質", "71"),
    ("無水", "71"),
    ("供熱機關影響", "71"),
]

(
    WordCloud()
    .add(series_name="熱點分析", data_pair=data, word_size_range=[6, 66])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="熱點分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
    .render("basic_wordcloud.html")
)      
  • 運作結果如下:
  • 【NLP開發】Python實作詞雲圖

2.2.4 WordCloud例子二

  • 代碼如下:
from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType


words = [
    ("愛看書的小沐", 10000),
    ("愛發呆的戈戈", 6181),
    ("Amy Schumer", 4386),
    ("Jurassic World", 4055),
    ("Charter Communications", 2467),
    ("Chick Fil A", 2244),
    ("Planet Fitness", 1868),
    ("Pitch Perfect", 1484),
    ("Express", 1112),
    ("Home", 865),
    ("Johnny Depp", 847),
    ("Lena Dunham", 582),
    ("Lewis Hamilton", 555),
    ("KXAN", 550),
    ("Mary Ellen Mark", 462),
    ("Farrah Abraham", 366),
    ("Rita Ora", 360),
    ("Serena Williams", 282),
    ("NCAA baseball tournament", 273),
    ("Point Break", 265),
]
c = (
    WordCloud()
    .add("", words, word_size_range=[20, 100], shape=SymbolType.DIAMOND)
    .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond"))
    .render("wordcloud_diamond.html")
)      
  • 運作結果如下:
  • 【NLP開發】Python實作詞雲圖

2.2.5 WordCloud例子三

  • 代碼如下:
from pyecharts import options as opts
from pyecharts.charts import WordCloud

words = [
    ("愛看書的小沐", 1446),
    ("愛發呆的戈戈", 1328),
    ("汽車", 928),
    ("視訊", 906),
    ("電視", 825),
    ("Lover Boy 88", 514),
    ("動漫", 486),
    ("音樂", 53),
    ("直播", 163),
    ("廣播電台", 86),
    ("戲曲曲藝", 17),
    ("演出票務", 6),
    ("給陌生的你聽", 1),
    ("懶洋洋", 1437),
    ("商業财經", 422),
    ("娛樂八卦", 353),
    ("軍事", 331),
    ("科技資訊", 313),
    ("社會時政", 307),
    ("時尚", 43),
    ("網絡奇聞", 15),
    ("旅遊出行", 438),
    ("景點類型", 957),
    ("花鳥萌寵", 914),
    ("綠植花卉", 311),
    ("狗", 257),
    ("其他寵物", 131),
    ("水族", 125),
    ("貓", 122),
    ("動物", 81),
    ("鳥", 67),
    ("創業", 363),
    ("目标職位", 162),
    ("目标行業", 50),
    ("兼職", 21),
    ("期望年薪", 20),
    ("實習", 16),
    ("雇主類型", 10),
    ("星座運勢", 789),
    ("星座", 316),
    ("公益", 90),
]

c = (
    WordCloud()
    .add(
        "",
        words,
        word_size_range=[20, 100],
        textstyle_opts=opts.TextStyleOpts(font_family="cursive"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-自定義文字樣式"))
    .render("wordcloud_custom_font_style.html")
)      
  • 運作結果如下:
  • 【NLP開發】Python實作詞雲圖

2.3 stylecloud

官方位址:

​​​https://github.com/minimaxir/stylecloud​​

Python package + CLI to generate stylistic wordclouds, including gradients and icon shapes!

stylecloud is a Python package that leverages the popular word_cloud package, adding useful features to create truly unique word clouds!

2.3.1 安裝

pip install stylecloud
or
pip install      
【NLP開發】Python實作詞雲圖

2.3.2 測試例子

import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt')      
【NLP開發】Python實作詞雲圖
import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-apple-alt')      
【NLP開發】Python實作詞雲圖
import stylecloud

from stop_words import get_stop_words
stop_words = get_stop_words('english')
stylecloud.gen_stylecloud(file_path='D:\jianai.txt',
                          icon_name='fas fa-apple-alt',
                         palette='cartocolors.qualitative.Pastel_3',
                          background_color='black',
                          output_name='apple.png',
                          collocations=False,
                          custom_stopwords=stop_words)      
【NLP開發】Python實作詞雲圖
import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-camera')      
【NLP開發】Python實作詞雲圖
import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-dolly')      
【NLP開發】Python實作詞雲圖
import stylecloud
stylecloud.gen_stylecloud(file_path=r'D:\jianai.txt', icon_name='fas fa-smile')      
【NLP開發】Python實作詞雲圖

結語

​如果您覺得該方法或代碼有一點點用處,可以給作者點個贊,或打賞杯咖啡;​

​╮( ̄▽ ̄)╭

​如果您感覺方法或代碼不咋地//(ㄒoㄒ)//,就在評論處留言,作者繼續改進;​

​o_O???

​如果您需要相關功能的代碼定制化開發,可以留言私信作者;​

​(✿◡‿◡)