使用 xml 解析 + PPT + WordCloud 生成任意形状的词云

使用 xml 解析 + PPT + WordCloud 生成任意形状的词云

  好久没认真写文章了,被毕业论文整的头疼,真就隔行如隔山,班主任在定量遥感、微波遥感上确实很厉害,但是在深度学习还有目标检测方面不大懂,他以为我就是跑了 3 个 Yolo 库就是个调代码的事情,但是事实上,每个环境都很复杂,尤其是我每次跑一个程序都需要2-3 甚至 4个小时,而服务器允许我运行的时间为6个小时不到,不打算立刻给论文了,改的我头疼,发个牢骚而已,心情不大好。

  先学 GIS、Python、Java 为主,GIS 应该是核心内容,我觉得,毕竟需要了解核心就必须从地理信息系统出发。

  今天终于完成了一点东西,结果图在下面,其实就是解析了一下 xml 文本然后生成了一个词云,当然电影还是我最喜欢的《超脱》了。词云的形状是我觉得最帅的男人了阿德里安,忧郁里却透露着一点洒脱。看看结果图吧。

在这里插入图片描述

在这里插入图片描述

import xml.etree.ElementTree as ET
tree = ET.parse('learn.xml')
root = tree.getroot()
#for child in root:
#    print(child.tag,child.attrib)
tag 是标签, attrib 是属性值,#text
# csv 中加入 newline 是因为 csvfile 是一个新的对象,encoding 则是声明编码格式
#如果没有指定 newline='',则嵌入引号中的换行符将无法正确解析,并且在写入时,
#使用 \r\n 换行的平台会有多余的 \r 写入。由于 csv 模块会执行自己的(通用)换行符处理,因此指定 newline='' 应该总是安全的。
#list = []
 for item in root.iter('d'):
   text = item.text
    
lst = []
 如果使用 attrib 的话无法解析中文
for country in root.findall('d'):
    lst.append(country.text)
    
#打开一个 txt 文件,必须声明格式 为 utf-8,否则换行符写不出
file = open('test.txt','w',encoding='utf-8') 

#逐行写出,其实并不推荐这种方式写出的,循环做的太多了。只是自己的代码看看无所谓啦,哈哈哈!!
for i in range(len(lst)):
    word = lst.pop()
    file.write(word)
    file.write('\n')
file.close()

import imageio

读取图像
mk = imageio.imread("test1.jpg")
w = wordcloud.WordCloud(mask=mk)
f = open('test.txt',encoding='utf-8')
txt = f.read()

w = wordcloud.WordCloud(width=1500,
                        height=1000,
                        background_color='white',
                        font_path='msyh.ttc',
                        mask=mk,
                        scale=15)
w.generate(txt)
w.to_file('output3-sentence.png')

  首先这段代码是我个人用的,如果也想要运行的话,至少要保证你的 xml 文件、图片文件和当前运行的 python 文件在同一个文件夹中。然后代码很乱是因为是一边尝试一边写的,中途代码实际上在我的 *.ipynb 中。

在这里插入图片描述

保存 xml 文件

本来一开始想用爬虫取爬的(其实也爬下来了,没继续处理罢了),结果服务器老是卡死,我觉得是 B 站有反爬虫机制,所以后来就把弹幕所在的 xml 文件给复制下来了。

实际上就是那么个 xml 文件,你右键保存一下就可以了

在这里插入图片描述

B 站弹幕的存储地址有个特点就是,它的弹幕网址保存在一个 url 里面。

https://comment.bilibili.com/37633033.xml

前面是 http ,然后中间是 comment.bilibili.com 最后面是视频的 BV 号 + xml,打开后就能看到视频的弹幕了。

xml 处理

import xml.etree.ElementTree as ET
#生成一个 ET 对象
tree = ET.parse('learn.xml')
root = tree.getroot()

#需要用文字把列表一个一个 append 进空列表
for country in root.findall('d'):
    lst.append(country.text)

for i in range(len(lst)):
    word = lst.pop()
    file.write(word)
    file.write('\n')
file.close()
  1. 其实过程就是打开一个 xml文件,然后生成一个 root 对象,然后由于生成的对象是一个块,length 长度为一,没法一行一行写出,所以我需要把它先 append 进列表。再一个一个 append 出来。

  2. 之后就是打开一个 txt 然后,逐行写出生成了 test.txt,像超脱的,我拿到了 9600 条弹幕,但是可能爬虫的话就会限制弹幕条数。

生成词云

import imageio
# 读取图像
mk = imageio.imread("test1.jpg")
w = wordcloud.WordCloud(mask=mk)
f = open('test.txt',encoding='utf-8')
txt = f.read()

w = wordcloud.WordCloud(width=1500,
                        height=1000,
                        background_color='white',
                        font_path='msyh.ttc',
                        mask=mk,
                        scale=15)
w.generate(txt)
w.to_file('output3-sentence.png')

代码其实是 copy 网上的一个的,改了改参数一下就行了,就是先读取阿德里安形状的照片,然后生成一个 mask。读取 txt文件,生成词云的文本,就可以了,代码就不详细解读了。

PPT 生成任意形状的图片

  一开始想用最上面的图片当形状,发现不行,于是就,放弃了,就开始网上找办法,一开始想还要下 photoshop 处理,太麻烦,偶然间想起了神器 PPT 就开始找博客,还真有办法,

在这里插入图片描述

用这个工具描边,然后拖拉结点,让它生成最好看的形状,过程挺烦的。。

在这里插入图片描述

之前那个有挺好的形状的没保存,为了写公众号的文章就随便画了一个,记得如果觉得烦的话可以用 ctrl + 左键 删除或者增加结点,白色结点会控制弧段,可以拖拽到直角。就不继续描边了。

然后复制右边的图,ctrl + c,点左边的图,选择颜色的填充方式为图片或者纹理填充,然后再殿下剪贴板

在这里插入图片描述

这个图随便裁剪的,之前那个图裁的很细(演示效果),然后保存图片,记得保存成 jpeg图像,就是不要保存成 png就行了,要不然词云会做成矩形。

最后

其实上面的步骤有点乱,其实就是读 xml 文件,写出 txt 然后准备词云的图片然后写出一个词云。和最近自己的心思一样,发现要学习的东西有好多,但是压力又好大,虽然才刚考上研,但是就是压力有点大。或许如《超脱》里面说的那样。

We all need somthing that distract us from complexity,reality, More or less to think about where they came from? More or less to think about the struggle that it takes to become somebody to get out of…to get out of the sea of pain ,we all have to get out of it.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值