python词云库wordCloud使用方法详解(解决中文乱码

1. 前言

词云是一种有效可视化文本数据的方式,其中文本中出现频率高的词汇会在词云中显示的更大、更加突出。在python中,我们可以使用词云库wordCloud轻松制作词云图表,并且解决中文乱码问题。本文将详细介绍wordCloud库的使用方法。

2. 安装wordCloud库

在使用wordCloud之前,我们需要先使用pip安装它。使用以下命令即可:

pip install wordcloud

3. 制作简单词云

在制作简单词云时,我们需要导入wordCloud库,并且将文本数据转化为字符串类型,利用wordCloud实例生成词云图形并显示:

from wordcloud import WordCloud

import matplotlib.pyplot as plt

text = "I love Python programming language" # 文本数据

wordcloud = WordCloud().generate(text) # 创建wordCloud实例并生成词云图形

plt.imshow(wordcloud, interpolation='bilinear')

plt.axis("off")

plt.show()

运行上述代码,程序会生成词云图形并展示。

这里需要注意的是:

interpolation:插值方法,用于处理图像中的像素缺失。默认情况下,WordCloud使用bilinear插值来处理图像,以更好地使图像看起来平滑。

axis:是否显示坐标轴线,此处axis("off")意味着不显示坐标轴。

4. 制作自定义词云

4.1 使用自定义字体

默认情况下,wordCloud使用的字体可能不太符合我们的要求,我们可以使用自己的字体。通过以下代码设置:

from wordcloud import WordCloud

import matplotlib.pyplot as plt

text = "I love Python programming language" # 文本数据

font_path = "D:/Fonts/STXINGKA.TTF" # 自定义字体路径

wordcloud = WordCloud(font_path=font_path).generate(text) # 创建wordCloud实例并生成词云图形

plt.imshow(wordcloud, interpolation='bilinear')

plt.axis("off")

plt.show()

运行上述代码,程序会生成词云图形并展示。在此代码中,font_path参数指定了字体的路径。我们需要先在计算机中放置字体文件,并且指定文件的路径才能成功应用。

4.2 修改词云形状

制作词云图形时,默认情况下wordCloud将使用矩形来作为词云的形状。我们可以通过指定一个外界轮廓来改变词云形状。这可以通过mask参数实现。以下是一个示例代码:

from wordcloud import WordCloud, STOPWORDS

import matplotlib.pyplot as plt

from PIL import Image

import numpy as np

text = open('myfile.txt', 'r').read() # 读取文本数据

font_path = "D:/Fonts/STXINGKA.TTF" # 自定义字体

mask = np.array(Image.open("cloud.png")) # 使用自定义轮廓

wordcloud = WordCloud(font_path=font_path, background_color="white", mask=mask, stopwords=STOPWORDS).generate(text)

plt.imshow(wordcloud, interpolation='bilinear')

plt.axis("off")

plt.show()

在上述代码中,mask参数用来指定自定义轮廓的图像,这通常需要通过Pillow(映像处理库)加载。在此代码中,我们使用了名为‘cloud.png’的文件作为自定义轮廓。除了指定轮廓以外,我们还可以定义一个背景颜色,这里将颜色设置为白色。

4.3 使用中文词云

在使用中文文本数据时,我们需要注意到wordCloud不支持中文字符。因此,我们需要进行中文字符转换。这可以通过一些处理步骤来完成。下面是一个简单示例:

from wordcloud import WordCloud

import jieba

import matplotlib.pyplot as plt

text = open('myfile.txt', 'r', encoding='utf-8').read() # 读取文本数据

text = " ".join(jieba.cut(text, cut_all=False)) # 将文本进行分词

font_path = "D:/Fonts/simhei.ttf" # 定义中文字体

wordcloud = WordCloud(font_path=font_path, background_color="white", width=1000, height=1000, max_font_size=100, scale=3.5, collocations=False, random_state=42).generate(text)

plt.imshow(wordcloud, interpolation='bilinear')

plt.axis("off")

plt.show()

在上述代码中,我们加载文本数据,使用jieba库对其进行分词,并且指定了中文字体。文本分词结果将会作为WordCloud实例的输入,然后生成词云图像并且展示。

4.4 其他自定义设置

除了上面介绍的自定义设置以外,我们还可以进行更多的设置。以下是一些常见的设置:

width/height: 指定词云图形的大小(默认为400x200)。

max_font_size:设置词云绘制时使用的最大字体大小(默认为200)。

max_words:指定生成的最大单词数量(默认为200)。

colormap:指定使用的颜色图。

random_state:使用此参数可以确保每个人都可以获得相同的结果。当我们重新运行代码时,结果将会发生变化,如果我们想要固定结果,可以使用此参数。

5. 解决中文乱码

在WordCloud制作词云时,中文字符可能会出现乱码问题。这通常是由于默认字体不支持中文格式所致。为了解决这个问题,我们可以使用Pillow库中的ImageFont将中文转换成图片格式,然后导入该图片作为WordCloud中的字体。以下是代码示例:

from wordcloud import WordCloud

import numpy as np

import PIL.Image as Image

import jieba

# 定义中文分词

text = open("myfile.txt", "r",encoding='utf-8').read()

text = " ".join(jieba.cut(text))

# 生成WordCloud实例并转换为图像

wc = WordCloud(font_path='msyh.ttf')

img = wc.generate(text).to_image()

# 导出图像文件并展示

img.save('wordcloud.png')

img.show()

结论

本文详细介绍了Python词云库wordCloud的使用方法。我们学习了如何制作词云图形,如何自定义词云形状,如何使用中文字符,并且解决了中文字符乱码的问题。

后端开发标签