使用Python定制词云

ojxr1023 8年前
   <p style="text-align:center"><img src="https://simg.open-open.com/show/54bfd709a7bdcab0788cdf01a50a6435.png"></p>    <p>在互联网时代,人们获取信息的途径多种多样,大量的信息充斥在我们周围。此时,如何从浩如烟海的信息中提炼出关键信息,并让人记住,显得至关重要。本教程我们将教你如何使用Python,制作炫酷的词云效果!</p>    <p>大家平时上网,一定会经常看到下图这样的词云。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/b68ce3eaa400900de583d92ea2fa00f8.png"></p>    <p>但你知道吗,词云还可以长这样: <img src="https://simg.open-open.com/show/78b40968daa32a6bebe92b59fb336f8e.jpg"></p>    <p>或者这样:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/34f4af8a8743ae80f940be6164dc663a.jpg"></p>    <p>什么是词云呢?</p>    <p>“词云”是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的无意义信息,使浏览者只要一眼扫过词云图片就可以领略文章或者网页内容的主旨。</p>    <p>不仅如此,一幅制作精美的词云图片,可以起到一图胜千言的效果,在报告或者PPT中适当的使用词云,会使表达更清晰充分,为演讲者表达的意义加分。</p>    <p>本节课,我们就教你实现这种效果。</p>    <p>一、课程介绍</p>    <h2>1. 内容简介</h2>    <p>本实验将使用Python的wordcloud扩展包制作词云,生成图片保存。并介绍如何改进wordcloud扩展包使其能显示中文字符,最后介绍如何使用自己喜欢的图片定制词云图片轮廓。</p>    <h3>2. 课程知识点</h3>    <ul>     <li> <p>制作词云的基本步骤和原理</p> </li>     <li> <p>Python代码实现词云制作</p> </li>     <li> <p>wordcloud扩展包的使用</p> </li>     <li> <p>使用自定义图片制作词云,分析《三体》I、 II、 III的关键</p> </li>    </ul>    <h2>3. 实验原理</h2>    <p>词云的原理是对输入的文本数据进行词频统计,根据词汇出现频率的不同,按不同比例显示出词汇,生成图片。频率高的词汇显示的大,频率低的词汇显示的小。文本数据可以是本地数据,也可是是爬虫动态从网络中获取的。</p>    <h2>4. 效果截图</h2>    <p style="text-align:center"><img src="https://simg.open-open.com/show/953940bb25d22c4600b9558b97ff85e4.png"> <img src="https://simg.open-open.com/show/114de7ca473dbba2ad1db2d80f433d30.png"></p>    <h2>二、开发准备</h2>    <p>打开Xfce终端,进入 Code 目录,创建 work 文件夹, 将其作为课程的工作目录。下载并安装实验需要的扩展包 。如果大家平时想在自己的电脑上进行实验,无论是Windows还是Linux还是Mac,都强烈推荐安装Anaconda,这是一个Python的科学计算包,里面几乎包含了常用的所有扩展包,不用自己费力安装了,该软件由Python之父带头维护,三个平台同时更新。</p>    <pre>  <code class="language-python">$ mkdir work && cd work  $ sudo apt-get update  $ sudo apt-get install python-dev  $ sudo pip install numpy  $ sudo apt-get install python-matplotlib  $ sudo apt-get install python-pil</code></pre>    <p>下载小说《三体》I、 II、 III。</p>    <pre>  <code class="language-python">$ wget http://labfile.oss.aliyuncs.com/courses/756/santi.txt  $ wget http://labfile.oss.aliyuncs.com/courses/756/santi2.txt  $ wget http://labfile.oss.aliyuncs.com/courses/756/santi3.txt</code></pre>    <p>安装wordcloud扩展包。</p>    <pre>  <code class="language-python">$ sudo pip install wordcloud</code></pre>    <h2>三、实验步骤</h2>    <p>本项目的详细步骤及全部代码可在 <a href="/misc/goto?guid=4959740073823403986" rel="nofollow,noindex"> 实验楼 </a> 查看并在线完成: <a href="/misc/goto?guid=4959740073921919097" rel="nofollow,noindex"> 使用Python定制词云 </a></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/b666ff39d949b12dc741ccaf8099e652.png"></p>    <h2>1. 运行一个简单工程,测试扩展包安装是否正常</h2>    <p>在对《三体》进行处理之前,我们先运行一下官方的示例程序,确保扩展包安装正常,程序能够正常工作。在work目录下新建python脚本,命名为simple.py,</p>    <pre>  <code class="language-python">$ gedit simple.py</code></pre>    <p>代码如下:</p>    <pre>  <code class="language-python">#!/usr/bin/env python  """  Minimal Example  ===============  Generating a square wordcloud from the US constitution using default arguments.  """    from os import path  from wordcloud import WordCloud    d = path.dirname(__file__)    # Read the whole text.  text = open(path.join(d, 'constitution.txt')).read()    # Generate a word cloud image  wordcloud = WordCloud().generate(text)    # Display the generated image:  # the matplotlib way:  import matplotlib.pyplot as plt  plt.imshow(wordcloud)  plt.axis("off")    # lower max_font_size  wordcloud = WordCloud(max_font_size=40).generate(text)  plt.figure()  plt.imshow(wordcloud)  plt.axis("off")  plt.show()</code></pre>    <p>由代码可见,程序运行时会搜寻脚本所在的路径下的文本文件“constitution.txt”,所以我们在运行脚本前需要将这个文本放入work文件夹下面。 通过下面的命令下载文本:</p>    <pre>  <code class="language-python">$ wget http://labfile.oss.aliyuncs.com/courses/756/constitution.txt</code></pre>    <p>在work文件夹下启动控制台,操作如下图所示:</p>    <p>在控制台中运行脚本:</p>    <pre>  <code class="language-python">$ python simple.py</code></pre>    <p>如果扩展包安装一切正常,程序将输出如下窗口:</p>    <p>至此,我们得到了一个英文词云。</p>    <h2>其他问题</h2>    <p><strong>解决中文显示问题</strong></p>    <p>我们已经成功安装了wordcloud扩展包,并成功运行了一个示例文件。但是这个示例文件有很多问题,首先,显示的是英文字符,在面对中国同事或者老板做报告和分享时,使用英文的词云明显不合适,而且很多文本本身就是中文词汇,没法制作成英文词云;词云的外轮廓显示的方方正正中规中矩,比较呆板,没有美感。</p>    <p><strong>定制词云</strong></p>    <p>我们经常在网上看到别人家的词云都是奇形怪状的,像下面这样:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/65c7f0ba6cb63fc1afb07dde33f738ab.png"></p>    <p>所以看着我们自己方方正正的词云,是不是感觉太中规中矩了?都不好意思拿出手了吧?</p>    <p>以上两个问题,大家可以先开动脑筋思考下,如果想不出来可以参考 完整教程 中的思路动手实践下,把问题一一解决。</p>    <p> </p>    <p> </p>    <p>来自:https://zhuanlan.zhihu.com/p/25538157</p>    <p> </p>