现在网上制作词云的工具太多,但是存在一个问题,就是免费的词云网站制作得丑、不支持中文、没有词频统计,收费的又感觉没那必要。现提供以下简单的词频统计+词云制作的方法。
首先,用到免费的词云制作网站为wordart.com,是个外国网站,需要导入词频统计数据。里面包含的词云调整功能丰富,可以自定义的地方很多,大家可以自己探索。
关于中文词频统计,则采用Python库进行。这里用到的是jieba第三方库,分词较准,灵活操作性强。脚本我已经编写好了,大家只需照做即可 。
一、中文词频统计
编写以下Python脚本:
xxxxxxxxxx
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)中按照以下方式进行添加:
创新办 3 i
云计算 5
凱特琳 nz
台中
一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
词性表参见下表:
标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 |
---|---|---|---|---|---|---|---|
n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间 |
nr | 人名 | ns | 地名 | nt | 机构名 | nw | 作品名 |
nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 |
a | 形容词 | ad | 副形词 | an | 名形词 | d | 副词 |
m | 数量词 | q | 量词 | r | 代词 | p | 介词 |
c | 连词 | u | 助词 | xc | 其他虚词 | w | 标点符号 |
PER | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
比如:

关于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