前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者:一粒米飯
本教程基于Python3,使用Jupyter上進行除錯開發,
涉及的Python基礎包括:
- 變數和函式的定義和使用
- 串列和字典等資料結構的使用
- 條件和回圈陳述句,if、for等
- 模塊的匯入和使用,import語法
需要安裝以下依賴庫:
- jupyter - 互動式筆記本
- matplotlib - Python2D繪圖庫
- jieba - Python中文分詞組件
- pillow - Python影像處理庫
- wordcloud - 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生成云圖
這里還需要一張底圖用于生成云圖,這里使用海賊王中喬巴的圖片
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/138768.html
標籤:Python
