Python實現海賊王的歌片語成詞雲圖

来源:https://www.cnblogs.com/hhh188764/archive/2020/06/06/13055370.html
-Advertisement-
Play Games

前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 作者:一粒米飯 喜歡的朋友歡迎關註小編,除了分享技術文章之外還有很多福利,私信“學習資料”可以領取包括不限於Python實戰演練、PDF電子文檔、面試集錦、學習資料等。 本教 ...


Python實現海賊王的歌片語成詞雲圖

 

前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

作者:一粒米飯

喜歡的朋友歡迎關註小編,除了分享技術文章之外還有很多福利,私信“學習資料”可以領取包括不限於Python實戰演練、PDF電子文檔、面試集錦、學習資料等。

本教程基於Python3,使用Jupyter上進行調試開發。

涉及的Python基礎包括:

  • 變數和函數的定義和使用
  • 列表和字典等數據結構的使用
  • 條件和迴圈語句,if、for等
  • 模塊的導入和使用,import語法

需要安裝以下依賴庫:

  • jupyter - 互動式筆記本
  • matplotlib - Python2D繪圖庫
  • jieba - Python中文分片語件
  • pillow - Python圖像處理庫
  • wordcloud - Python詞雲庫

目標

從海賊王的歌詞中提取出關鍵詞,然後生成喬巴形狀的雲圖,最後效果如下:

 

Python實現海賊王的歌片語成詞雲圖

 

1.準備數據

1. 事先我已準備好15首海賊王的歌詞文本文件, 放在本地的data目錄下。

ls data  
BON VOYAGE.txt      free will.txt        向著陽光.txt
Jungle P.txt        memories.txt         心的地圖.txt
Run!Run!Run!.txt    share the world.txt  未來航海.txt
Shining Ray.txt     全新世界.txt          永久指針.txt
believe.txt         冒險世界.txt          瘋狂彩虹.txt

 

2. 原始數據準備OK後,先實現一個函數迴圈讀取data目錄下的所有文件

import os

def read_content(content_path):
    '''
    讀取目錄下的所有文件併合併成一個內容塊返回
    '''
    
    # 初始化內容為空
    content = ''
    
    # 使用os模塊的listdir函數枚舉文件夾下所有文件
    for f in os.listdir(content_path):
        
        # 拼接文件完整路徑
        file_fullpath = os.path.join(content_path, f)
        
        # 判斷是否是文件
        if os.path.isfile(file_fullpath): 
            print('loading {}'.format(file_fullpath))
            # 將文件內容進行拼接
            content += open(file_fullpath, 'r').read()
            # 每首歌詞之間用換行符分隔
            content += '\n'
    print('done loading')
    return content
# 讀取文件夾內容
content = read_content('./data')
print('\n顯示內容的前面部分...\n')
print(content[:99])
loading ./data/believe.txt
loading ./data/BON VOYAGE.txt
loading ./data/free will.txt
loading ./data/Jungle P.txt
loading ./data/memories.txt
loading ./data/Run!Run!Run!.txt
loading ./data/share the world.txt
loading ./data/Shining Ray.txt
loading ./data/全新世界.txt
loading ./data/冒險世界.txt
loading ./data/向著陽光.txt
loading ./data/心的地圖.txt
loading ./data/未來航海.txt
loading ./data/永久指針.txt
loading ./data/瘋狂彩虹.txt
done loading

顯示內容的前面部分...

世代傳承的意志 時代的浪潮 人的夢想
這些都是無法阻擋的
只要人們繼續追求自由的解答
這一切都將永不停止

我只相信著未來 就算有人笑我也無所謂
賓士的熱情讓你更耀眼
雖然好刺眼 但我仍要繼續凝視

 

3. 使用jieba提取出關鍵詞

import jieba.analyse

# 這裡使用jieba的textrank提取出1000個關鍵詞及其比重
result = jieba.analyse.textrank(content, topK=1000, withWeight=True)

# 生成關鍵詞比重字典
keywords = dict()
for i in result:
    keywords[i[0]] = i[1]
print(keywords)
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/5d/mjgsmy7n6vlfrk42v1_jtc7c0000gn/T/jieba.cache
Loading model cost 1.042 seconds.
Prefix dict has been built succesfully.
{'揚起': 0.15365137065823337, '開始': 0.33887155728627016, '解答': 0.0790997113814255, '奇跡': 0.2019238936444467, '留下': 0.15805775202925612, '想像': 0.08987560148767863, '感覺': 0.058819354518174556, '時間': 0.07551208515941268, '天堂': 0.08441183647061005, '無法': 0.287129785071775, '伸出': 0.09256367548351727, '回到': 0.08349124701438736, '背負': 0.14437968256383968, '前路': 0.05312061493282433, '屏息': 0.1531365836936351, '秘密': 0.09965773105020974, '七色': 0.08878413441578677, '朋友': 0.1397662417669881, '初識': 0.0830682006897093, '光芒': 0.13352559090174942, '指示': 0.06934108111132412, '擁有': 0.11544194392460741, '色彩': 0.12409038761092896, '世間': 0.18888249529919593, '歡笑': 0.050377170853215976, '選擇': 0.06444326221759296, '沾濕': 0.13352559090174942, '起來': 0.0845180267560427, '經歷': 0.12616245714507396, '小時候': 0.044857635061158724, '失去': 0.05236725016973628, '歌唱': 0.09501118261648268, '分享': 0.05812477489419511, '收起': 0.0915149943221848, '誓言': 0.05988821730341018, '我會': 0.057893640349250965, '不變': 0.12622369920668572, '熄滅': 0.0791613178160737, '吶喊': 0.13320154266821363, '看見': 0.0854926451902643, '堅持': 0.08213062695901673, '意志': 0.1188937276195136, '美學': 0.1435834973386806, '浮動': 0.13450943469637847, '填滿': 0.06039295853670237, '天使': 0.16317731845659758, '找到': 0.05533519004787966, '微笑': 0.0799090440777227, '懷著': 0.4817498228002652, '丟棄': 0.13322161964784338, '跟隨': 0.09197164245106097, '地圖': 0.07341861667659995, '倒流': 0.07515309019779545, '心情': 0.40510507626640513, '加速': 0.16020612316413707, '時代': 0.299255975193261, '映出': 0.058190874872291284, '收穫': 0.12902702145794429, '飛舞': 0.13454804385716426, '重重障礙': 0.07306626680915267, '腳步': 0.11339400407789377, '相遇': 0.07486958598052014, '延伸': 0.11401423021177887, '就算': 0.23310398624372167, '旋律': 0.19062549166169998, '夢想': 1.0, '擁抱': 0.20056370347498786, '釋放': 0.08048707411918865, '分界點': 0.11445040093643048, '超越': 0.08754528438684966, '水平線': 0.12663559447803469, '地平線': 0.1021244005469806, '忘卻': 0.13322161964784338, '發展': 0.05521593346271129, '思念': 0.1296081980642235, '中將': 0.1730725099154214, '漫歷': 0.14999796242367477, '照耀': 0.13450943469637847, '抓住': 0.1081902273317158, '大海': 0.2191369911522112, '夢幻': 0.08878413441578677, '沒錯': 0.06908130733179857, '變遷': 0.08388306680969282, '綻開': 0.0970297226758736, '背影': 0.04489925975654794, '響起': 0.09348462612242271, '傳承': 0.08343950722719029, '淚水': 0.2043342791423508, '寄托': 0.15140800018240286, '出發': 0.1376622319882071, '安排': 0.09570513284670208, '凝視': 0.09058874193734022, '目標': 0.20253971299175438, '想法': 0.13322161964784338, '盤旋': 0.04653128171301495, '浪花': 0.14292308695167863, '贏得': 0.13454804385716426, '摸索': 0.13352559090174942, '命運': 0.17767531296473504, '要緊': 0.07100381557014668, '同伴': 0.13322161964784338, '相信': 0.06780937693484108, '到達': 0.11990597718546447, '起航': 0.17121317788528045, '伙伴': 0.1021244005469806, '鼓起': 0.08326947015393454, '角逐': 0.13450943469637847, '得到': 0.139130325974439, '熱情': 0.16974545588616355, '咒文': 0.0755227913516226, '追逐': 0.12956507425075023, '吝惜': 0.044375524671743924, '旗幟': 0.22318864743628655, '不會': 0.136742080156981, '緊握著': 0.07074596658159177, '傳遞': 0.08318907791061766, '知道': 0.049014975541075576, '避開': 0.11925067678883694, '失敗': 0.19864619215021206, '直到': 0.16170953592115245, '開闢': 0.11502344884527459, '駛向': 0.08949640367673918, '超乎': 0.17571155584916723, '航海圖': 0.17530963330220897, '星空': 0.07085050507113418, '足跡': 0.11380925226394865, '憧憬': 0.13136516727228634, '信號': 0.1345775449622126, '停息': 0.14813550567788228, '抑制': 0.0823736383036949, '力爭上游': 0.15985443423198126, '希望': 0.3064348996750364, '探求': 0.10037115703978353, '浪潮': 0.11205492596248597, '賓士': 0.04647451827818632, '迷惑': 0.10853833347078598, '疾速': 0.09289401344883545, '重拾': 0.13450943469637847, '雙手': 0.11833008801272633, '繼續': 0.26128426151029494, '前進': 0.38049616332706393, '海洋': 0.07764780435427948, '力量': 0.22448970728817977, '邁進': 0.07788425716172835, '海賊王': 0.05988821730341018, '奔向': 0.1050116694918882, '仰望': 0.11375613415335455, '開創': 0.04909483864698758, '忘懷': 0.1178931622715251, '伴隨': 0.1881308832052442, '直率': 0.0819811725519203, '邁向': 0.09805414857074332, '等待': 0.05312061493282433, '追趕': 0.23590910145448465, '橙色': 0.19827470012221343, '飛濺': 0.14517190902077373, '填入': 0.10713343097770893, '尋找': 0.341410398721581, '羈絆': 0.13454804385716426, '願望': 0.11502105997392056, '描繪': 0.04882446831721362, '號角': 0.18892935090190913, '深淵': 0.11341295672924022, '傳說': 0.10453681102617361, '胸膛': 0.10826393677032255, '追憶': 0.13454804385716426, '改變': 0.1105923128490412, '起跑': 0.07840202504448608, '成為': 0.2958892859451614, '投入': 0.054739663860643786, '謎題': 0.13450943469637847, '旅途': 0.13166250912547978, '高聲': 0.178643850709469, '追求': 0.1715459745440232, '總會': 0.13242770285698083, '遙望': 0.050377170853215976, '畏懼': 0.05048971733869129, '刻下': 0.10563678032609539, '面對': 0.19682389784566295, '流下': 0.10423811536600736, '逃脫': 0.04488557389782134, '奔跑': 0.08204660421218422, '火種': 0.1411150676880229, '冒險': 0.5005306993202343, '世界': 0.5449287709811719, '能夠': 0.25882968219047386, '碎片': 0.13709646143068321, '信念': 0.11795116869385924, '未知': 0.08221194482386406, '吹響': 0.1779165442702793, '全部': 0.13392040723985732, '孩子': 0.13811401117842068, '獲得': 0.06780937693484108, '預感': 0.16639206740929596, '把握': 0.08675073217837388, '示人': 0.1026344593871126, '聽說': 0.05312061493282433, '衝出': 0.13224882644548555, '沒有': 0.15159970579125204, '喜宴': 0.17379403916878816, '才能': 0.12972776044573475, '時候': 0.17420500418671414, '人們': 0.10319997520144626, '為止': 0.052150373830141754, '抬頭': 0.11467512436536162, '無限': 0.06764346188867, '出航': 0.03865274219069975, '故事': 0.13392040723985732, '可能': 0.07390594415565045, '引導': 0.16732685717721082, '情緒': 0.12968877267733753, '內心': 0.1475787080533443, '單憑': 0.12542873282600936, '仿效': 0.0918818019595783, '方向': 0.1629842877398635, '想象': 0.09265141828602656, '太陽': 0.20931270320049486, '舉起': 0.07341861667659995, '熟悉': 0.12327709678857283, '日子': 0.08479628778416956, '回憶': 0.13352559090174942, '來自': 0.09467283342394821, '片長': 0.07540537390616804, '絕望': 0.09314642277073719, '阻撓': 0.07790059908360082, '追夢': 0.09309586423204035, '鼓勵': 0.10880965048592321, '阻擋': 0.17223247845464154, '蔓延': 0.17439976351747224, '征途': 0.15601230856847134, '集起': 0.0904380138460612, '航線': 0.12392209071853239, '終能': 0.13392040723985732, '困擾': 0.12606024257520246, '展開': 0.17772773888330856, '帶領': 0.07912571036131048, '不了': 0.16113705986038165, '起始': 0.09330731354358968, '地方': 0.16598627575218824, '踏上': 0.13236658985957564, '描述': 0.07626512494851125, '啟程': 0.10245516018260722, '放飛': 0.1598542189807057, '雙臂': 0.09340867759406857, '心靈': 0.3305662079948827, '眼神': 0.08399973860720229, '笑顏': 0.13085137132492453, '狂歡': 0.11807469241626582, '銘刻': 0.19068475937471777, '看到': 0.054296059984562176, '大家': 0.18077773704285963, '船舵': 0.10845934179932064, '完成': 0.1227002236449499, '驅使': 0.14999738505133325, '出現': 0.13115377751750223, '跨越': 0.1331441398565992, '高漲': 0.136124054847588, '風帆': 0.11119913692251271, '漂浮': 0.1274242316646285, '起飛': 0.10309000992149217, '相識': 0.13352559090174942, '音符': 0.16639206740929596, '迎風': 0.13392040723985732, '勇氣': 0.1507813084829896, '空蕩': 0.10791710727689573, '躍動': 0.0829313414107292, '天空': 0.5285292408817545}

 

2.使用wordcloud生成雲圖

這裡還需要一張底圖用於生成雲圖,這裡使用海賊王中喬巴的圖片

Python實現海賊王的歌片語成詞雲圖

 

from PIL import Image, ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator

# 初始化圖片
image = Image.open('./images/tony_src.png')
graph = np.array(image)

# 生成雲圖,這裡需要註意的是WordCloud預設不支持中文,所以這裡需要載入中文黑體字型檔
wc = WordCloud(font_path='./fonts/simhei.ttf',
    background_color='white', max_words=1000, mask=graph)
wc.generate_from_frequencies(keywords)
image_color = ImageColorGenerator(graph)
# 顯示圖片
plt.imshow(wc)
plt.imshow(wc.recolor(color_func=image_color))
plt.axis("off") # 關閉圖像坐標系
plt.show()

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 面完螞蟻後,早就聽聞拼多多這個獨角獸,決定也去面一把。首先我在脈脈找了一個拼多多的HR,加了微信聊了下,發了簡歷便開始我的拼多多面試之旅。這裡要非常感謝拼多多HR小姐姐,從面試內推到offer確認一直都在幫我,人真的很nice。 ...
  • from matplotlib import pyplotimport numpyx=numpy.random.randn(100) #生成100個隨機數,關於標準正態分佈 y=-x+numpy.random.randn(100)*0.5pyplot.scatter(x,y,s=25,c='pink ...
  • 所有知識體系文章,GitHub已收錄,歡迎Star!再次感謝,願你早日進入大廠! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual 01設計模式之單例設計模式 一、什麼是單例設計模式? 單例模式(Singleton Pattern) ...
  • 一、python的應用領域 二、人工智慧範例 1.範例1 將寫在紙上的文字,精準地識別出來 1 import requests 2 from aip import AipOcr 3 4 image = requests.get('https://res.pandateacher.com/python ...
  • 在閱讀《阿裡巴巴Java開發手冊》時,發現有一條關於二方庫依賴中介面返回值不允許使用枚舉類型的規約,具體內容如下: 在談論為什麼之前先來科普下什麼是二方庫,二方庫也稱作二方包,一般指公司內部發佈到中央倉庫,可供公司內部其他應用依賴的庫(jar 包)。 那麼一方庫便是本工程內部子項目模塊依賴的庫;三方 ...
  • 原作:BRETT CANNON 譯者:豌豆花下貓@Python貓 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the-terminal 為了我們推出的 VS Code 的 Python 插件 [1],我寫了一個簡單的腳 ...
  • 反轉一個單鏈表。 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL // 將鏈表分為new和old兩個鏈表 // curOld是old鏈表的頭指針 // curNew是new鏈表的頭指針 // 本質上講old鏈表的結點一個一個取出後,將取出的節點 ...
  • 相信接觸過Python的小伙伴們都知道運行Python腳本程式的方式有多種,目前主要的方式有:互動式環境運行、命令行視窗運行、開發工具上運行等,其中在不同的操作平臺上還互不相同。今天,小編講些Python基礎的內容,以Windows下互動式環境為依托,演示Python程式的運行。 一般來說,順利安裝 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...