【Python】txt文本文件生成词云图片

  • 资源提供
  • 纯方框,无文字
  • 单字过滤
  • 任意形状词云
  • 提高清晰度
  • 完整代码


该程序由pycharm运行,产生的图片文件在项目文件夹内。


纯方框,无文字

python根据文字和图片 python 文字生成图片_python


查询知wordcloud默认是不支持显示中文的,中文会被显示成方框。

需要借助wordlcloud.WordCloud初始化函数的参数font_path,把支持中文的字体的路径传给font_path

查询知道,电脑字体保存系统盘的"Windows"文件中,找到"Fonts"文件夹里。C:\Windows\Fonts

python根据文字和图片 python 文字生成图片_Windows_02

所以在python程序中,我们就可以调用这个绝对路径。

import jieba
import wordcloud
#打开文件,记得采用utf-8编码解析中文文字
f=open("C:/Users/Lenovo/AppData/Local/Temp/共产党宣言.txt","r", encoding="utf-8")
#读取内容到t
t =f.read()
f.close()
#采用jieba分词,结果为ls,其中含有很多单个字符
ls =jieba.lcut(t)
#下条主要是为了排除一个字符以下的词,没有这条文本将会分出都是单字。
ls = [word for word in ls if len(word)>1]
#下行代码将分好的列表词,转为空格分隔的字符串
txt=" ".join(ls)
#配置词云对象w
w =wordcloud.WordCloud(
	font_path ="C:/Windows/Fonts/msyh.ttc",
	width= 1000,
	height =700, 
	background_color ="white")
#加载txt到词云对象中并输出结果为词云.png
w.generate(txt)
w.to_file("词云.png")

python根据文字和图片 python 文字生成图片_python_03

单字过滤

ls = [word for word in ls if len(word)>1]# 该条主要是为了排除一个字符以下的词,没有这条文本将会分出都是单字。 添加这条语句后的结果为:

python根据文字和图片 python 文字生成图片_词云_04

任意形状词云

wordcloud库通过mask方法,可以形成任意形状的词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:mask = imread(‘读取一张图片.png’),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。

想形成一个五角星,则需提供一个背景为白色的五角星图片。

需要引入一个库,imread方法能够读取一个图片文件,并且保存成一个图片文件变量。

通过设置max_words来限制显示的词云中单词数目。

from imageio import imread
mask=imread("fivestar.png")
w=wordcloud.WordCloud(mask=mask,...)

python根据文字和图片 python 文字生成图片_字符串_05


还可以添加一些停用词

exclude={'我们','你们','他们','它们','因为','因而','所以','如果','那么',\
'如此','只是','但是','就是','这是','那是','而是','而且','虽然','这些',\
'有些','然后','已经','于是','一种','一个','一样','时候','没有','什么',\
'这样','这种','这里','不会','一些','这个','仍然','不是','自己','知道',\
'可以','看到','那儿','问题','一会儿','一点','现在','两个','三个'}
w=wordcloud.WordCloud(stopwords=exclude,...)

添加停用词后的效果如图。

python根据文字和图片 python 文字生成图片_字符串_06

提高清晰度

通过配置scale来提高清晰度

w=wordcloud.WordCloud(scale=4,xxxx)

scale参数为空下,500X500,47.52kB

python根据文字和图片 python 文字生成图片_python根据文字和图片_07


scale=2下,1000X1000,109.38kB

python根据文字和图片 python 文字生成图片_字符串_08


scale=4下,2000X2000,257.08kB

python根据文字和图片 python 文字生成图片_python根据文字和图片_09

完整代码

import jieba
import wordcloud
from imageio import imread
#配置背景图片
mask=imread("C:/Users/Lenovo/Pictures/Saved Pictures/芳3.jpg")
exclude={'我们','你们','他们','它们','因为','因而','所以','如果','那么',\
'如此','只是','但是','就是','这是','那是','而是','而且','虽然','这些',\
'有些','然后','已经','于是','一种','一个','一样','时候','没有','什么',\
'这样','这种','这里','不会','一些','这个','仍然','不是','自己','知道',\
'可以','看到','那儿','问题','一会儿','一点','现在','两个','三个'}
#打开文件,记得采用utf-8编码解析中文文字
f=open("C:/Users/lenovo/AppData/Local/Temp/共产党宣言.txt","r", encoding="utf-8")
#读取内容到t
t =f.read()
f.close()
#采用jieba分词,结果为ls,其中含有很多单个字符
ls =jieba.lcut(t)
#下条主要是为了排除一个字符以下的词,没有这条文本将会分出都是单字。
ls = [word for word in ls if len(word)>1]
#下行代码将分好的列表词,转为空格分隔的字符串
txt=" ".join(ls)
w =wordcloud.WordCloud(scale=2,stopwords=exclude,mask=mask,font_path= "C:/Windows/Fonts/msyh.ttc",width= 1000,height =700,background_color="white")
w.generate(txt)
w.to_file("词云.png")