python+NLTK 自然语言学习处理三:如何在nltk/matplotlib中的图片中显示中文
我们首先来加载我们自己的文本文件,并统计出排名前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 依次在以下四个位置寻找配置文件:
- 当前工作目录下的 matplotlibrc。
- $MATPLOTLIBRC/matplotlibrc。
- 用户家目录下的 matplotlibrc。 如 Linux 一般在 ~/.config/matplotlib/matplotlibrc, macOS 在 ~/.matplotlib/matplotlibrc。
- 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中的图片中显示中文的更多相关文章
- python+NLTK 自然语言学习处理:环境搭建
首先在http://nltk.org/install.html去下载相关的程序.需要用到的有python,numpy,pandas, matplotlib. 当安装好所有的程序之后运行nltk.dow ...
- python+NLTK 自然语言学习处理六:分类和标注词汇一
在一段句子中是由各种词汇组成的.有名词,动词,形容词和副词.要理解这些句子,首先就需要将这些词类识别出来.将词汇按它们的词性(parts-of-speech,POS)分类并相应地对它们进行标注.这个过 ...
- python+NLTK 自然语言学习处理五:词典资源
前面介绍了很多NLTK中携带的词典资源,这些词典资源对于我们处理文本是有大的作用的,比如实现这样一个功能,寻找由egivronl几个字母组成的单词.且组成的单词每个字母的次数不得超过egivronl中 ...
- python+NLTK 自然语言学习处理四:获取文本语料和词汇资源
在前面我们通过from nltk.book import *的方式获取了一些预定义的文本.本章将讨论各种文本语料库 1 古腾堡语料库 古腾堡是一个大型的电子图书在线网站,网址是http://www.g ...
- Python基础教程学习(三)
如何定义类 class ClassName(base_class[es]): "optional documentation string" static_member_decla ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中的项编辑方法editTriggers、editItem和openPersistentEditor作用及对比分析
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在树型部件QTreeWidget中,有三种方法触发进行项数据的编辑:editTriggers触发编辑 ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中判断项是否首列跨所有列展示的isFirstItemColumnSpanned方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在前面<PyQt(Python+Qt)学习随笔:QTreeWidgetItem项是否首列跨所有 ...
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用findItems搜索项
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTreeWidget类实例的树型部件中,可以根据文本.搜索列以及匹配模式来搜索满足条件的项,调用 ...
- Python的matplotlib库画图不能显示中文问题解决
有两种解决办法: 一种是在代码里设置为能显示中文的字体,如微软雅黑(msyh.ttf)和黑体(simsun.ttc) 如下在要画图的代码前添加: import matplotlib.pyplot as ...
随机推荐
- Storage protocol stacks
http://brasstacksblog.typepad.com/brass-tacks/ http://brasstacksblog.typepad.com/brass-tacks/2016/02 ...
- [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene
深入浅出 Cocoa 多线程编程之 block 与 dispatch quene 罗朝辉(http://www.cppblog.com/kesalin CC 许可,转载请注明出处 block 是 Ap ...
- UNIX网络编程卷1 server程序设计范式8 预先创建线程,由主线程调用accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.程序启动阶段创建一个线程池之后仅仅让主线程调用 accept 并把客户连接传递给池中某个 ...
- Python moni模拟鼠标事件
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4 ...
- maven仓库中有jar包pom还报错
maven仓库中有jar包pom还报错 就报错,咋啦? 这个包来源不明,自己拷贝进来的吧?你当我mvn是傻子?我要去网上验证一下: 我自己有个_remote.respositories文件,如果自己用 ...
- wordpress账户防暴力破解攻击
一.修改数据库表前缀 默认的表前缀是wp_,如果你安装博客的时候没有修改,可以参考这篇文章修改下表前缀. 修改完登录测试下,如果登录成功后提示“您没有足够的权限访问该页面”,说明前缀没有修改完整,参照 ...
- 【MVC2】发布到IIS上User.Identity.Name变成空
VS中运行时通过User.Identity.Name能取到用户名,发布到IIS上后,该值为空. 调查后发现在网站设定→[认证]中同时打开了[Windows认证]和[匿名认证], 关掉[匿名认证]后就能 ...
- 应该知道的Linux技巧(转载)
这篇文章来源于Quroa的一个问答<What are some time-saving tips that every Linux user should know?>—— Linux用户 ...
- javascript 匿名函数和模块化
任何变量,函数,数组,对象,只要不在函数内部,都被认为是全局的,这就是说,这个页面上的其它脚本也可以访问它,而且可以覆盖重写它. 解决办法是,把你的变量放在一个匿名函数内部,定义完之后立即调用它.封装 ...
- Oracle中Hint深入理解(原创)
http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...