现在网上制作词云的工具太多,但是存在一个问题,就是免费的词云网站制作得丑、不支持中文、没有词频统计,收费的又感觉没那必要。现提供以下简单的词频统计+词云制作的方法。

首先,用到免费的词云制作网站为wordart.com,是个外国网站,需要导入词频统计数据。里面包含的词云调整功能丰富,可以自定义的地方很多,大家可以自己探索。

关于中文词频统计,则采用Python库进行。这里用到的是jieba第三方库,分词较准,灵活操作性强。脚本我已经编写好了,大家只需照做即可 。

[TOC]

一、中文词频统计

编写以下Python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import csv
import re
import jieba
import jieba.posseg as pseg

in_file_name = "text.txt" # 要分析的文本
user_dict_name = "user_dict.txt" # 用户自定义词典
block_words_name = "block_words.txt" # 屏蔽词
out_file_name = 'out.csv' # 词频统计数据的输出
block_word_class = ["c","uj","p","r","ul"] # 屏蔽词性
regex = '^[\u4E00-\u9FA5A-Za-z0-9]+$' # 除去标点符号,只保留中英文和数字

data = open(in_file_name, "r", encoding='utf-8').read() # 打开文件
jieba.load_userdict(user_dict_name) # 加载用户自定义词典
seg_list = pseg.cut(data,use_paddle=True) # 默认是精确模式
block_words_file = open(block_words_name,"r",encoding="utf-8") # 打开屏蔽词库
reader = csv.reader(block_words_file)
block_words = [w[0] for w in reader] # 生成屏蔽词列表
words = {}

# 统计
for str,flag in seg_list:
# 屏蔽词、屏蔽词性
if flag in block_word_class or str in block_words:
continue
if re.search(regex, str):
try:
words[str]
except KeyError:
words[str] = 0
words[str] = words[str] + 1

# 写
out = open(out_file_name, 'w', newline="", encoding="utf-8") # 注意,这里使用"w"不是"wb",否则报错
writer = csv.writer(out,delimiter="\t")
for k, v in sorted(words.items(), key=lambda k: k[1], reverse=True):
writer.writerow([k,v])

代码的第一段可根据自己的需求进行更改。现对这些参数进行解释。

1. 需要分析的文本文件 in_file_name

在同目录下准备以下三个文件:需要分析的文本文件、用户自定义词典、屏蔽词库。将需要分析的文本文件名填入in_file_name中。

示例中,test.txt包含需要词频统计的内容。

2. 用户自定义词典 user_dict_name

此处脚本中,使用jieba默认的精确模式,会自动识别新词。但如果自己想添加自定义的词,可以在新的文本文件(utf-8)中按照以下方式进行添加:

1
2
3
4
创新办 3 i
云计算 5
凱特琳 nz
台中

一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

词性表参见fxsjy/jieba: 结巴中文分词 (github.com)

比如:

关于jieba库的使用参见:fxsjy/jieba: 结巴中文分词 (github.com)

3. 屏蔽词库 block_words_name

新建一个文本文件,在里面添加不需要进行词频统计的词。一行一词。

比如:

4. 输出的.csv文件名 out_file_name

指定输出的.csv文件名。

5.(可选)屏蔽词性block_word_class

指定不需要进行词频统计的词的词性。词性列表参见下文。这里默认屏蔽连词、助词、介词、代词。

6.(可选)保留词的正则表达式 regex

指定需要进行词频统计的词的正则表达式。这里默认为中文、英文和数字。

当一切准备好后,运行脚本。

输出:

二、WordArt网站设置

运行以上脚本,复制输出的内容后。打开网站Word Art - Edit - WordArt.com

1. 导入统计信息

点击导入:

粘贴,并按照以下设置:

导入成功:

其他自定义操作可自行在网站上操作。

2. 导入字体

网站支持英文词云。如果想让中文词云也能生成,就必须上传一款中文字体。中文字体可以在系统字体(Fonts文件夹)中找:

导入字体后:

3. 选择形状

可以在网站图库中选。这里我采用自己上传的方式。注意,上传PNG图片更好。

至于词云中其他自定义设定可以自行探索。

4. 生成

准备好了之后,点击生成按钮。

当当当当!生成成功。

参考连接

不同的词频统计第三方库:Python中文分词及词频统计 - 简书 (jianshu.com)

csv库官方文档:csv — CSV File Reading and Writing — Python 3.10.2 documentation