【Python】txt文本文件生成词云图片
- 资源提供
- 纯方框,无文字
- 单字过滤
- 任意形状词云
- 提高清晰度
- 完整代码
该程序由pycharm运行,产生的图片文件在项目文件夹内。
纯方框,无文字
查询知wordcloud默认是不支持显示中文的,中文会被显示成方框。
需要借助wordlcloud.WordCloud
初始化函数的参数font_path
,把支持中文的字体的路径传给font_path
。
查询知道,电脑字体保存系统盘的"Windows"文件中,找到"Fonts"文件夹里。C:\Windows\Fonts
所以在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")
单字过滤
ls = [word for word in ls if len(word)>1]# 该条主要是为了排除一个字符以下的词,没有这条文本将会分出都是单字。
添加这条语句后的结果为:
任意形状词云
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,...)
还可以添加一些停用词
exclude={'我们','你们','他们','它们','因为','因而','所以','如果','那么',\
'如此','只是','但是','就是','这是','那是','而是','而且','虽然','这些',\
'有些','然后','已经','于是','一种','一个','一样','时候','没有','什么',\
'这样','这种','这里','不会','一些','这个','仍然','不是','自己','知道',\
'可以','看到','那儿','问题','一会儿','一点','现在','两个','三个'}
w=wordcloud.WordCloud(stopwords=exclude,...)
添加停用词后的效果如图。
提高清晰度
通过配置scale来提高清晰度
w=wordcloud.WordCloud(scale=4,xxxx)
scale参数为空下,500X500,47.52kB
scale=2下,1000X1000,109.38kB
scale=4下,2000X2000,257.08kB
完整代码
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")