打算绘制中文词云图?那你得先学会如何作中文文本分词。跟着咱们的教程,一步步用Python来动手实践吧。git
在《如何用Python作词云》一文中,咱们介绍了英文文本的词云制做方法。你们玩儿得可还高兴?github
文中提过,选择英文文本做为示例,是由于处理起来最简单。可是很快就有读者尝试用中文文本作词云了。按照前文的方法,你成功了吗?编程
估计是不成功的。由于这里面缺了一个重要的步骤。浏览器
观察你的英文文本。你会发现英文单词之间采用空格做为强制分隔符。微信
例如:工具
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.post
可是,中文的文本就没有这种空格区隔了。为了作词云,咱们首先须要知道中文文本里面都有哪些“词”。字体
你可能以为这根本不是问题——我一眼就能看出词和词之间的边界!编码
对,你固然能够。你能够人工处理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 inline
import 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 inline
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
复制代码
此次你看到的输出图形就变成了这个样子:
这样一来,咱们就经过中文词云的制做过程,体会到了中文分词的必要性了。
这里给你留个思考题,对比一下这次生成的中文词云,和上次作出的英文词云:
这两个词云对应的文本都来自维基百科,描述的是一样一部剧,它们有什么异同?从这种对比中,你能够发现维基百科中英文介绍内容之间,有哪些有趣的规律?
掌握了本方法后,你本身作出了一张什么样的中文词云图?除了作词云之外,你还知道中文分词的哪些其余应用场景?欢迎留言,分享给你们。咱们共同交流讨论。
喜欢请点赞。还能够微信关注和置顶个人公众号“玉树芝兰”(nkwangshuyi)。
若是你对数据科学感兴趣,不妨阅读个人系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。