温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python如何实现海贼王的歌词组成词云图

发布时间:2021-11-25 14:29:11 来源:亿速云 阅读:140 作者:小新 栏目:大数据

小编给大家分享一下Python如何实现海贼王的歌词组成词云图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言

本教程基于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生成云图

这里还需要一张底图用于生成云图,这里使用海贼王中乔巴的图片

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()

以上是“Python如何实现海贼王的歌词组成词云图”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI