打算绘制中文词云图?那你得先学会如何做中文文本分词。跟着我们的教程,一步步用 Python 来动手实践吧。

需求

在此前发布的文章《从零开始教你用 Python 做词云》一文中,我们介绍了英文文本的词云制作方法。大家玩儿得可还高兴?

文中提过,选择英文文本作为示例,是因为处理起来最简单。但是很快就有读者尝试用中文文本做词云了。按照前文的方法,你成功了吗?

估计是不成功的。因为这里面缺了一个重要的步骤。

观察你的英文文本。你会发现英文单词之间采用空格作为强制分隔符。

例如:

Yes Minister is a satirical British sitcom written by Sir Antony Jay and Jonathan Lynn that was first transmitted by BBC Television between 1980 and 1984, split over three seven-episode series.

但是,中文的文本就没有这种空格区隔了。为了做词云,我们首先需要知道中文文本里面都有哪些“词”。

你可能觉得这根本不是问题——我一眼就能看出词和词之间的边界!

对,你当然可以。你可以人工处理1句、100句,甚至是10000句话。但是如果给你100万句话呢?

这就是人工处理和电脑自动化处理的最显著区别——规模。

别那么急着放弃啊,你可以用电脑来帮忙。

你的问题应该是:如何用电脑把中文文本正确拆分为一个个的单词呢?

这种工作,专业术语叫做分词。

在介绍分词工具及其安装之前,请确认你已经阅读过《从零开始教你用 Python 做词云》一文,并且按照其中的步骤做了相关的准备工作,然后再继续依照本文的介绍一步步实践。

分词

中文分词的工具有很多种。有的免费,有的收费。有的在你的笔记本电脑里就能安装使用,有的却需要联网做云计算。

今天给大家介绍的,是如何利用Python,在你的笔记本电脑上,免费做中文分词。

我们采用的工具,名称很有特点,叫做“ 结巴分词 ”,具体链接如下:

为什么叫这么奇怪的名字?

读完本文,你自己应该就能想明白了。

我们先来安装这款分词工具。回到你的“终端”或者“命令提示符”下。

进入你之前建立好的demo文件夹。

输入以下命令:

pip install jieba

好了,现在你电脑里的Python已经知道该如何给中文分词了。

数据

在《从零开始教你用 Python 做词云》一文中,我们使用了英剧”Yes, minister“的维基百科介绍文本。这次我们又从维基百科上找到了这部英剧对应的中文页面。翻译名称叫做《是,大臣》。

将网页正文拷贝下来之后,存入文本文件 yes-minister-cn.txt,并且将这个文件移动到我们的工作目录 demo 下面。

好了,我们有了用于分析的中文文本数据了。

先别忙着编程序。正式输入代码之前,我们还需要做一件事情,就是下载一份中文字体文件 simsun.ttf。具体下载链接如下:

下载后,将这个ttf字体文件也移动到demo目录下,跟文本文件放在一起。

代码

在命令行下,执行:

jupyter notebook

浏览器会自动开启,并且显示如下界面。

这里还有上一次词云制作时咱们的劳动成果。此时目录下多了一个文本文件,是"Yes, Minister"的中文介绍信息。

打开这个文件,浏览一下内容。

我们确认中文文本内容已经正确存储。

回到Jupyter笔记本的主页面。点击New按钮,新建一个笔记本(Notebook)。在Notebooks里面,请选择Python 2选项。

系统会提示我们输入Notebook的名称。为了和上次的英文词云制作笔记本区别,就叫它wordcloud-cn好了。

我们在网页里唯一的代码文本框里,输入以下3条语句。输入后,按Shift+Enter键执行。

filename = "yes-minister-cn.txt"

with open(filename) as f:

mytext = f.read()

然后我们尝试显示mytext的内容。输入以下语句之后,还是得按Shift+Enter键执行。

print(mytext)

显示的结果如下图所示。

既然中文文本内容读取没有问题,我们就开始分词吧。输入以下两行语句:

import jieba

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

系统会提示一些信息,那是结巴分词第一次启用的时候需要做的准备工作。忽略就可以了。

分词的结果如何?我们来看看。输入:

print(mytext)

你就可以看到下图所示的分词结果了。

单词之间已经不再紧紧相连,而是用空格做了区隔,就如同英文单词间的自然划分一样。

你是不是迫不及待要用分词后的中文文本作词云了?

可以,输入以下语句:

from wordcloud import WordCloud

wordcloud = WordCloud().generate(mytext)

%pylab inlineimport matplotlib.pyplot as plt

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

plt.axis("off"

激动地期待着中文词云的出现?

可惜,你看到的词云是这个样子的。

你是不是非常愤怒,觉得这次又掉坑里了?

别着急,出现这样的结果,并不是分词或者词云绘制工具有问题,更不是因为咱们的教程步骤有误,只是因为字体缺失。词云绘制工具wordcloud默认使用的字体是英文的,不包含中文编码,所以才会方框一片。解决的办法,就是把你之前下载的simsun.ttf,作为指定输出字体。

输入以下语句:

from wordcloud import WordCloud

wordcloud = WordCloud(font_path="simsun.ttf").generate(mytext)

%pylab inlineimport matplotlib.pyplot as plt

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

plt.axis("off")

这次你看到的输出图形就变成了这个样子:

这样一来,我们就通过中文词云的制作过程,体会到了中文分词的必要性了。

这里给你留个思考题,对比一下此次生成的中文词云,和上次做出的英文词云:

这两个词云对应的文本都来自维基百科,描述的是同样一部剧,它们有什么异同?从这种对比中,你可以发现维基百科中英文介绍内容之间,有哪些有趣的规律?

讨论

掌握了本方法后,你自己做出了一张什么样的中文词云图?除了做词云以外,你还知道中文分词的哪些其他应用场景?欢迎留言,分享给大家。我们共同交流讨论。

雷锋网相关阅读:

====================================分割线================================

本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

阿里云python中文社区_一文详解如何用 python 做中文分词-阿里云开发者社区相关推荐

  1. python批量下载文件只有1kb_详解如何用python实现一个简单下载器的服务端和客户端...

    话不多说,先看代码: 客户端: import socket def main(): #creat: download_client=socket.socket(socket.AF_INET,socke ...

  2. python 画云图_【词云图】如何用python的第三方库jieba和wordcloud画词云图

    一直想学一下如何用python画词云图,觉得很好玩,本文就写一下我自己的一些尝试. 1.提前准备 一般准备以下四样就可以啦. 第一,电脑安装python,我装的是3.6. 第二,安装第三方库jieba ...

  3. 没有执行此操作所需的足够可用空间。_一文详解 MySQL 高可用之 DRBD | 原力计划...

    作者 | wzy0623责编 | 屠敏出品 | CSDN 博客大多数MySQL高可用解决方案都是基于MySQL自带的各种复制技术.本质上是将一个实例上的数据更新或事务,在其它实例上进行重放,从而完成数 ...

  4. 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选

    作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...

  5. 万字长文详解如何用 Python 玩转 OpenGL | CSDN 博文精选

    作者 | 天元浪子 责编 | 伍杏玲 出品 | CSDN 博客 [CSDN 编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Pyth ...

  6. [转载] python字符串_一文详解Python字符串条件判断方法

    参考链接: Python字符串| isdecimal 作者 | 张小吉 来源 | 鸡仔说(ID:jizaishuo) 前言 人喜欢为自己的错误,找各种借口开脱.本周做算法题leetcode<39 ...

  7. nacos 本地测试_一文详解 Nacos 高可用特性

    简介:我今天介绍的 Nacos 高可用,是 Nacos 为了提升系统稳定性而采取的一系列手段.Nacos 的高可用不仅仅存在于服务端,同时也存在于客户端,以及一些与可用性相关的功能特性中,这些点组装起 ...

  8. R 多变量数据预处理_超长文详解:C语言预处理命令

    一  前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能 ...

  9. 分布式系统关联查询_一文详解分布式系统 | 留言送书

    分布式系统,顾名思义,就是让多台服务器.多计算单元,协同来完成整体的计算任务.它拥有多种组织方式.在分布式系统中,使用分层模型,路由和代理计算任务.存储任务,将不同的工作,划分到不同业务集群机器中,是 ...

  10. 狄利克雷分布公式_一文详解隐含狄利克雷分布(LDA)

    一.简介 隐含狄利克雷分布(LatentDirichletAllocation,简称LDA)是由DavidM.Blei.AndrewY.Ng.MichaelI.Jordan在2003年提出的,是一种词 ...

最新文章

  1. ECLIPSE在线安装SVN
  2. Win7命令终端基础配色指南
  3. 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
  4. 第十周项目1-程序填充与阅读(三)
  5. java获取文件视图_springmvc-直接访问视图文件
  6. Android P(2)---计划概览
  7. arm linux装wine,Ubuntu下安装wine详细介绍
  8. 蓝桥杯 ALGO-69 算法训练 字符串逆序
  9. 正则表达式验证首尾是空格的字符串
  10. mysql生成uui mybatis,MyBatis自动生成UUID并返回
  11. win7从光盘进入修复计算机,win7光盘修复系统步骤
  12. 三、面向对象(高琪java300集+java从入门到精通笔记)
  13. 虾皮开店难吗,如何判断适不适合入驻虾皮(一)
  14. matlab中三视图如何画,[matlab 三维图]怎样把三维图导入到MATLAB
  15. python3文件读写实例_2.2.3.1Python-实例---文件读写
  16. Linux中进程的状态
  17. 离散作业用c语言编写覆盖,c语言论文3000字_优秀论文范文3000字_大一论文范文3000字...
  18. Grafana 定制化修改 汉化Grafana
  19. 详解六大QQ病毒特征及清除方法
  20. 万般皆是命,半点不由人

热门文章

  1. spring cloud gateway转发服务报错。
  2. java代码实现kafka消费端consumer的from-beginning功能
  3. 通讯与计算机网络在线作业,浙大秋通讯与计算机网络在线作业试题及答案
  4. c语言括号里三种字符,c语言的基本数据类型都有什么,麻烦知道用大括号分类,非常感谢...
  5. 大疆创新2014年校园招聘笔试题(嵌入式类)
  6. 修改RAC中的私网地址导致CRS启动失败
  7. 可靠传输协议 rdt 1.0、rdt 2.0、rdt 2.1、rdt 2.2、rdt3.0
  8. CSS 实现平行四边形、菱形、切角效果、梯形
  9. linux 6.7 远程端口,CentOS6.7安装vncserver及xrdp实现远程桌面
  10. android sqlite 示例,Android SQLite数据库操作示例