我们首先来加载我们自己的文本文件,并统计出排名前20的字符频率

if __name__=="__main__":

corpus_root='/home/zhf/word'

wordlists=PlaintextCorpusReader(corpus_root,'.*')

for w in wordlists.words():

print(w)

fdist=FreqDist(wordlists.words())

fdist.plot(20,cumulative=True)

文本内容如下:

the RRC setup success rate dropped

ERAB setup success rate dropped

prach issue

客户反馈

显示的图片如下,其中中文字符显示的是乱码。

这其中的原因在于nltk中的plt其实是调用的是matplotlib中的plot。而在ubuntun中

matplotlib 从配置文件 matplotlibrc 中读取配置,字体相关内容也在其中。matplotlib 依次在以下四个位置寻找配置文件:

  1. 当前工作目录下的 matplotlibrc。
  2. $MATPLOTLIBRC/matplotlibrc。
  3. 用户家目录下的 matplotlibrc。 如 Linux 一般在 ~/.config/matplotlib/matplotlibrc, macOS 在 ~/.matplotlib/matplotlibrc。
  4. INSTALL/matplotlib/mpl-data/matplotlibrc,其中 INSTALL 指具体的安装目录。

我们来看下matplotlib的配置文件放在哪的。通过下面两种方式可以查询到

方法一:可以查询出配置文件以及当前使用的字体方式。可以看出使用的字体是/DejaVuSans.ttf, 这个文件不是中文的。

from matplotlib.font_manager import findfont, FontProperties

if __name__=="__main__":

print(matplotlib.get_configdir())

print(findfont(FontProperties(family=FontProperties().get_family())))

/home/zhf/.config/matplotlib

/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf

方法二:能查出python2.7和python3.6各自的路径

root@zhf-maple:/home/zhf/桌面# locate -b \mpl-data

/usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data

/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data

在mpl-data下进入font/ttf文件夹可以看到所有的字体方式,如果需要中文的话需要使用SimHei.ttf文件。可以看到没有这个文件

可以通过fc-list | grep SimHei命令查看当前系统下是否有安装simhei.ttf文件。如果有安装word文档的话应该都是有的。如果没有的话需要去网上去下载一个

root@zhf-maple:/home/zhf# fc-list | grep SimHei

/usr/share/fonts/wps-office/simhei.ttf: 黑体,SimHei:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta

将这个文件copy到

/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/font/ttf文件夹下面

mpl-data目录下有matplotlib的配置文件matplotlibrc。进入编辑,在font.sans-serif中将SimHei设置为第一个也就是最高优先级。

清除matplotlib中的缓存

root@zhf-maple:/home/zhf/桌面# cd ~/.cache/matplotlib

root@zhf-maple:~/.cache/matplotlib# rm ‘*.*’

此时再运行可以看到中文正常显示

如果你只是想个别的文件使用中文,可以不用修改matplotlibrc配置文件,进行如下设置。也可以在单次调用的时候显示中文

matplotlib.rcParams['font.sans-serif'] = 'SimHei'

x=[1,2,3]

y=[4,5,6]

plt.plot(x,y)

plt.title('测试')

plt.xlabel('x轴')

plt.ylabel('y轴')

plt.grid(True)

plt.show()

python+NLTK 自然语言学习处理三:如何在nltk/matplotlib中的图片中显示中文的更多相关文章

  1. python+NLTK 自然语言学习处理:环境搭建

    首先在http://nltk.org/install.html去下载相关的程序.需要用到的有python,numpy,pandas, matplotlib. 当安装好所有的程序之后运行nltk.dow ...

  2. python+NLTK 自然语言学习处理六:分类和标注词汇一

    在一段句子中是由各种词汇组成的.有名词,动词,形容词和副词.要理解这些句子,首先就需要将这些词类识别出来.将词汇按它们的词性(parts-of-speech,POS)分类并相应地对它们进行标注.这个过 ...

  3. python+NLTK 自然语言学习处理五:词典资源

    前面介绍了很多NLTK中携带的词典资源,这些词典资源对于我们处理文本是有大的作用的,比如实现这样一个功能,寻找由egivronl几个字母组成的单词.且组成的单词每个字母的次数不得超过egivronl中 ...

  4. python+NLTK 自然语言学习处理四:获取文本语料和词汇资源

    在前面我们通过from nltk.book import *的方式获取了一些预定义的文本.本章将讨论各种文本语料库 1 古腾堡语料库 古腾堡是一个大型的电子图书在线网站,网址是http://www.g ...

  5. Python基础教程学习(三)

    如何定义类 class ClassName(base_class[es]): "optional documentation string" static_member_decla ...

  6. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中的项编辑方法editTriggers、editItem和openPersistentEditor作用及对比分析

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在树型部件QTreeWidget中,有三种方法触发进行项数据的编辑:editTriggers触发编辑 ...

  7. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中判断项是否首列跨所有列展示的isFirstItemColumnSpanned方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在前面<PyQt(Python+Qt)学习随笔:QTreeWidgetItem项是否首列跨所有 ...

  8. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用findItems搜索项

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTreeWidget类实例的树型部件中,可以根据文本.搜索列以及匹配模式来搜索满足条件的项,调用 ...

  9. Python的matplotlib库画图不能显示中文问题解决

    有两种解决办法: 一种是在代码里设置为能显示中文的字体,如微软雅黑(msyh.ttf)和黑体(simsun.ttc) 如下在要画图的代码前添加: import matplotlib.pyplot as ...

随机推荐

  1. Ruby on rails初体验(二)

    体验一中添加了一个最基本的支架和一个简单的数据迁移,实现了一个基本的增删改查的功能列表.体验二中要在次功能上继续丰满一下功能.实现如下效果: 在每个公司中都包含有不同的部门,按照体验一中的方法,添加一 ...

  2. eclipse中mybatis generator插件的安装与使用,实现自动生成代码

    git地址:https://github.com/mybatis/generator 下载后解压: 选择任意一个版本的jar放到eclipse的features目录下即可 选择任意一个版本的jar放到 ...

  3. VS2010 MFC中 窗口分割的实现

    分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...

  4. VS中Debug模式和Release模式的区别

    一.Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程 ...

  5. MFC中 自定义消息

    想在对话框显示出来后立即执行一段代码. 方法之一是自定义消息,即添加一个自定义的消息在消息队列中等待对话框初始化之后从消息队列中读取消息执行代码. 在OnInitDialog返回之前post一个自定义 ...

  6. JSON API:用 JSON 构建 API 的标准指南中文版

    译文地址:https://github.com/justjavac/json-api-zh_CN 假设你和你的团队以前争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 ...

  7. 深入Java----集合----BitSet

    BitSet类    大小可动态改变, 取值为true或false的位集合.用于表示一组布尔标志. java中有三种移位运算符 <<      :     左移运算符,num <&l ...

  8. js 动态获取对象多级属性

    var obj={ f1:{f2:{f3:2}} } var key="f1.f2.f3" var value=eval("obj."+key); consol ...

  9. 转: 微信开源C/C++ RPC框架PhxRPC

    转自: http://mp.weixin.qq.com/s?__biz=MzI4NDMyNTU2Mw==&mid=2247483734&idx=1&sn=da364812eca ...

  10. mysql使用mysqldump 与 mysqlimport进行数据库迁移

    1.导入数据库 1)source source /home/platvt/product/pc2_create_tables.sql 2)mysqlimport 使用mysqlimport导入数据: ...