今天跑去剪头发,理发师又说我头发变少了(黑人问号脸???),我距离上次剪头发已经过去了两个月了OK?唉,说多了都是泪。。。
今天写的是怎么用Python去做词云。本来是准备用Pycharm的,但是它说我缺少Microsoft什么什么的,然后导词云包导不进去,还折腾了好久,最后放弃了Pycharm,决定用sublime了,说实话,sublime是真的强大,按照网上的教程,装个环境就可以写Python了。
在用python做词云的时候需要导入的包有wordcloud和PIL,其中PIL(Python Image Library)是python平台图像处理标准库,功能是真的强大。首先需要读取文件 :
按Ctrl + B运行程序,正确读取文件的结果为 :
接下来导包,然后生成最简单的词云(白框忽略,这是PEP8的格式规范问题,忘了调了) :
代码无错误的情况下会有弹窗弹出一张图片,就是生成的词云 :
接下来是生成那种有轮廓的词云,这里就需要继续导入其他包,这里导入的包为numpy,numpy系统是python的一种开源的数值计算扩展,这种工具可以用来存储和处理大型矩阵。这里在处理的时候将给出形状的图片表示为一个大型矩阵,再有颜色的地方来进行填词(导包 :import numpy as np)。导包之后需添加一个遮罩层,遮罩层就是用来限制生成图片的形状 :
接下来给出原图与生成的词云 :
附上生成词云的源代码 :
from wordcloud import WordCloud import PIL.Image as image import numpy as np with open("F:\wordcloud\\resource\love.txt") as fp: text = fp.read() # print(text) mask = np.array(image.open("F:\wordcloud\image\love.jpg")) wordcloud = WordCloud( mask=mask ).generate(text) image_produce = wordcloud.to_image() image_produce.show()
上述生成词云的代码只能读取英文的文件去生成词云,如果需要生成中文的词云,还需导入jieba分词的包。jieba分词的切分还是蛮准的。接下来生成中文的词云(讲解可见代码注释):
from wordcloud import WordCloud import PIL.Image as image import numpy as np import jieba # 分词 def trans_CN(text): # 接收分词的字符串 word_list = jieba.cut(text) # 分词后在单独个体之间加上空格 result = " ".join(word_list) return result with open("F:\wordcloud\\resource\DLRB.txt") as fp: text = fp.read() # print(text) # 将读取的中文文档进行分词 text = trans_CN(text) mask = np.array(image.open("F:\wordcloud\image\love.jpg")) wordcloud = WordCloud( # 添加遮罩层 mask=mask, # 生成中文字的字体,必须要加,不然看不到中文 font_path = "C:\Windows\Fonts\STXINGKA.TTF" ).generate(text) image_produce = wordcloud.to_image() image_produce.show()
在选择字体的时候注意,去自己C盘下找,因为fonts是C盘下的隐藏文件夹,直接输入路径即可,后面.TTF看自己电脑里有什么字体,根据需要可以从网上下载(我的字体是以前写前端的时候下载的,一般来说电脑里是没有的,复制就会报错),接下来是生成中文的词云 (遮罩层的图片不变):
这大概就是词云的基础了,可以将爬虫和词云生成结合在一起,在爬取信息之后生成这样的词云。