溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現(xiàn)海賊王的歌詞組成詞云圖

發(fā)布時間:2021-11-25 14:29:11 來源:億速云 閱讀:132 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下Python如何實現(xiàn)海賊王的歌詞組成詞云圖,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

本教程基于Python3,使用Jupyter上進行調(diào)試開發(fā)。

涉及的Python基礎包括:

  • 變量和函數(shù)的定義和使用

  • 列表和字典等數(shù)據(jù)結(jié)構(gòu)的使用

  • 條件和循環(huán)語句,if、for等

  • 模塊的導入和使用,import語法

需要安裝以下依賴庫:

  • jupyter - 交互式筆記本

  • matplotlib - Python2D繪圖庫

  • jieba - Python中文分詞組件

  • pillow - Python圖像處理庫

  • wordcloud - Python詞云庫

目標

從海賊王的歌詞中提取出關(guān)鍵詞,然后生成喬巴形狀的云圖

1.準備數(shù)據(jù)

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. 原始數(shù)據(jù)準備OK后,先實現(xiàn)一個函數(shù)循環(huán)讀取data目錄下的所有文件

import os

def read_content(content_path):
    '''
    讀取目錄下的所有文件并合并成一個內(nèi)容塊返回
    '''
    
    # 初始化內(nèi)容為空
    content = ''
    
    # 使用os模塊的listdir函數(shù)枚舉文件夾下所有文件
    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))
            # 將文件內(nèi)容進行拼接
            content += open(file_fullpath, 'r').read()
            # 每首歌詞之間用換行符分隔
            content += '\n'
    print('done loading')
    return content
# 讀取文件夾內(nèi)容
content = read_content('./data')
print('\n顯示內(nèi)容的前面部分...\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

顯示內(nèi)容的前面部分...

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

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

3. 使用jieba提取出關(guān)鍵詞

import jieba.analyse

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

# 生成關(guān)鍵詞比重字典
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, '經(jīng)歷': 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, '發(fā)展': 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, '出發(fā)': 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, '繼續(xù)': 0.26128426151029494, '前進': 0.38049616332706393, '海洋': 0.07764780435427948, '力量': 0.22448970728817977, '邁進': 0.07788425716172835, '海賊王': 0.05988821730341018, '奔向': 0.1050116694918882, '仰望': 0.11375613415335455, '開創(chuàng)': 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, '內(nèi)心': 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, '帶領(lǐng)': 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, '驅(qū)使': 0.14999738505133325, '出現(xiàn)': 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如何實現(xiàn)海賊王的歌詞組成詞云圖

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") # 關(guān)閉圖像坐標系
plt.show()

以上是“Python如何實現(xiàn)海賊王的歌詞組成詞云圖”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI