在PYTHON二级教程中有一个错误,10.8.2节给出了生成《红楼梦》基本词云图的代码。不少人按照代码做一遍,才发现,生成的词云图并不像教材图片中的那么理想,出现了大量字体很大的“单字”,这些“单字”并没有什么意义。
错误的词云图
wordcloud是phython很好用的一个第三方库,通常和jieba库一同使用。为什么出现了这样大字号“单字”的错误,我们先看代码。
可见下图的错误代码中,直接使用了jieba.lcut( )函数生成的含有“单字”的列表,在没有过滤掉这些“单字”的情况下,就用.join( )函数进行连接,生成新的字符串。因此,词云图中含有较多的“单字”,而且字号比较大,遮挡了有用的词语,词云图的质量不好。
错误的代码
为了纠正错误,对该段代码进行修改,如下图,新添加了一个ls=[ ]列表,将words列表中的非“单字”逐个传送到了ls中,这样也就过滤了“单字”。然后将新列表ls执行.join( )函数,连接成wordcloud使用的长字符串。
修正后的代码
此时生成的词云图如下图所示,可见其中已经过滤掉了“单字”,词语的显示更加清晰。
正确的词云图
正确的代码如下:
#红楼梦词云图
import jieba
from wordcloud import WordCloud
excludes={"什么","一个","我们","那里","你们",'如今',\
"说道","知道","老太太","起来","姑娘",'这里',\
'出来','他们','众人','自己','一面','太太',\
'只见',"怎么",'奶奶','两个','没有','不是',\
'不知','这个','听见','的','又'}
f=open('红楼梦.txt','r',encoding='utf-8')
txt=f.read()
f.close()
words=jieba.lcut(txt)
ls=[]
for i in words:
if len(i)!=1:
ls.append(i)
newtxt=' '.join(ls)
wordcloud=WordCloud(background_color='white',\
height=600,\
width=800,\
font_path='msyh.ttc',\
max_font_size=80,
max_words=200,
stopwords=excludes,\
).generate(newtxt)
wordcloud.to_file('红楼梦基本词云.jpg')