用Python做中文分词就是这么简单!
欢迎大家参与在留言区交流
AI研习社两大福利就在文末!
不可错过~
AI研习社按:本文作者王树义,原载于微信公众号玉树芝兰(nkwangshuyi),AI研习社经授权发布。
打算绘制中文词云图?那你得先学会如何做中文文本分词。跟着我们的教程,一步步用 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,在你的笔记本电脑上,免费做中文分词。
我们采用的工具,名称很有特点,叫做 “结巴分词”,具体链接如下:
https://github.com/fxsjy/jieba
为什么叫这么奇怪的名字?
读完本文,你自己应该就能想明白了。
我们先来安装这款分词工具。回到你的 “终端” 或者 “命令提示符” 下。
进入你之前建立好的 demo 文件夹。
输入以下命令:
pip install jieba
好了,现在你电脑里的 Python 已经知道该如何给中文分词了。
数据
在《从零开始教你用 Python 做词云》一文中,我们使用了英剧”Yes, minister“的维基百科介绍文本。这次我们又从维基百科上找到了这部英剧对应的中文页面。翻译名称叫做《是,大臣》。
将网页正文拷贝下来之后,存入文本文件 yes-minister-cn.txt,并且将这个文件移动到我们的工作目录 demo 下面。
好了,我们有了用于分析的中文文本数据了。
先别忙着编程序。正式输入代码之前,我们还需要做一件事情,就是下载一份中文字体文件 simsun.ttf。具体下载链接如下:
http://t.cn/RKuSeLl
下载后,将这个 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 研习社(okweiwu),回复 1 领取
【超过 1000G 神经网络/AI/大数据、教程、论文!】
👏福利二: 本周内(截止至 7 月 23 日晚 24 点)
本公众号本周发布的所有文章
在文章底部留言评论,获得最多赞的社友,
社长将送出 西瓜书(《机器学习》周志华)1 本
推荐阅读
《看完这篇即可学会中文分词及原理!》
话题讨论
有没有要去 CVPR 的朋友?
在评论区留言我们一起面基啊!
欢迎在评论区分享
↓↓↓