用Python生成词云

今天跑去剪头发,理发师又说我头发变少了(黑人问号脸???),我距离上次剪头发已经过去了两个月了OK?唉,说多了都是泪。。。

今天写的是怎么用Python去做词云。本来是准备用Pycharm的,但是它说我缺少Microsoft什么什么的,然后导词云包导不进去,还折腾了好久,最后放弃了Pycharm,决定用sublime了,说实话,sublime是真的强大,按照网上的教程,装个环境就可以写Python了。

在用python做词云的时候需要导入的包有wordcloudPIL,其中PILPython Image Library)是python平台图像处理标准库,功能是真的强大。首先需要读取文件 :

Ctrl + B运行程序,正确读取文件的结果为 :


接下来导包,然后生成最简单的词云(白框忽略,这是PEP8的格式规范问题,忘了调了) :


代码无错误的情况下会有弹窗弹出一张图片,就是生成的词云 :


接下来是生成那种有轮廓的词云,这里就需要继续导入其他包,这里导入的包为numpynumpy系统是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盘下找,因为fontsC盘下的隐藏文件夹,直接输入路径即可,后面.TTF看自己电脑里有什么字体,根据需要可以从网上下载(我的字体是以前写前端的时候下载的,一般来说电脑里是没有的,复制就会报错),接下来是生成中文的词云 (遮罩层的图片不变):


这大概就是词云的基础了,可以将爬虫和词云生成结合在一起,在爬取信息之后生成这样的词云。



猜你喜欢

转载自blog.csdn.net/ydydyd00/article/details/80665028