前叙

该博文继承之前的文章,进一步介绍NLPIR2016的使用,三个内容(利用NLPIR 的发现新词功能自动提取文本内的新词汇,解决worldcloud中英文混合只显示中文的问题,NLPIR与worldcloud结合生成词云)
写作本博客需要一个小时,阅读需要十二分钟.

使用 NLPIR2016 获取新词

# 之前已经展示过的代码,介绍了NLPIR2016中获取新词的三个方式
# 获得新词,第二个参数控制新词的个数,排名按照TF-IDF(term frequency–inverse document frequency)排序
# 该功能可以和AddUserWord()方法配合使用,以更好地获取分词效果
# strs1 = GetNewWords(text,c_int(10),[c_char_p, c_int, c_bool])
# print strs1
# 获得新词(从txt文件中),第二个参数控制新词的个数,排名按照TF-IDF(term frequency–inverse document frequency)排序
# strs10 = GetFileNewWords(text,c_int(10),[c_char_p, c_int, c_bool])
# print strs10
# WindowsError: exception: access violation reading 0x0000000000000000
# 获得关键词,第二个参数控制新词的个数,排名按照TF-IDF(term frequency–inverse document frequency)排序
# strs2= GetKeyWords(text,c_int(10),[c_char_p, c_int, c_bool])
# print strs2# 我们将在代码中利用内存文本发现新词的方法封装起来
# 第一个参数是要加入而文本,第二个参数是获取的新词个数
def getNewWordsByNLPIR(text, number):txt1 = GetNewWords(text, c_int(number), [c_char_p, c_int, c_bool])txt2 = txt1.split('#')txt3 = []txt4 = []txt5 = []for item2 in txt2:txt3.append(item2.encode('utf-8').split('/'))if txt3 != []:txt4.append(txt3)txt3 = []for i in txt4:for j in i:if j[0] != [] and j[0] != '':txt5.append(j[0])return txt5
#注意返回的是numpy的列表类型
# 然后你就可以通过一个简单的循环将其添加进NLPIR的词典
for item in NewWordAddUserWord(item)

worldcloud 无法显示中文的问题

  1. 谈谈解决时的思考过程
    博主在写这篇博客时使用的是python2.7的,结果当NLPIR2016与wordcloud结合是,发现world只显示text中的英文,而不显示中文,而这和之前的结巴是不一样的,并非制定了字体就可以解决的.于是我便将整个程序运行过程中的编码格式都检查了一遍,最后确认每个环节都是utf-8的编码,而最后的输入worldcloud使用的是wordcloud.generate(text.encode(‘utf-8’)),但是结果还是不行.
    百般无奈之下,博主先停下先去读读其它书,便拿起一本数据清洗的书读,当我在读到其中一句话python2.x处理文本数据时最好在一开始读取文件的时候就设定好编码时,突然灵光一闪想到,即使使用了encode(‘utf-8’)难道其实内存中的编码格式还是不对?
    于是我试着使用codecs将text先存入硬盘,再按照utf-8读取出来,果然好了.但是很明显的代码真的很烂,但是我确实确定了确实是最后输入wordcloud的文本编码有问题,最起码并非真正的可用的utf-8编码(encode(‘utf-8’)并没有发挥作用),于是我试着直接将其替换为python内部使用的unicode对象,结果果然成功了.
  2. 原因与解决方案
# 注意因为NLPIR2016在进行中文分词时会默认转换编码,所以输出的文本需要转化为utf-8的编码
# 但是在python2.7中还能使用unicode(strs, encoding='utf8')将其转化为Unicode对象,而encode('utf-8')的是无法生效的.
# 注意制定wordcloud的字体,否则中文可能显示乱码

生成词云实例

# - * - coding: utf - 8 -*-
#
# 作者:田丰(FontTian)
# 创建时间:'2017/5/23'
# 邮箱:fonttian@163.com
# CSDN:http://blog.csdn.net/fontthronefrom os import path
from nlpir import *
from scipy.misc import imread
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from ctypes import *
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
d = path.dirname(__file__)text_path = 'txt/lztest.txt'  # 设置要分析的文本路径
stopwords_path = 'stopwords\stopwords1893.txt'  # 停用词词表
text = open(path.join(d, text_path)).read()
txt = seg(text)
kw_list = []
seg_list = []# 获得新词,第二个参数控制新词的个数,排名按照TF-IDF(term frequency–inverse document frequency排序
# 该功能可以和AddUserWord()方法配合使用,以更好地获取分词效果# print strs1
# print type(strs1)
# 富山雅史/n_new/28.45#白王血裔/n_new/19.83#秘仪咒文/n_new/19.19#风纪委员会主席/n_new/15.30#龙族/n_new/14.48#龙类/n_new/13.79#龙族血裔/n_new/13.78#龙族血统/n_new/13.19#执行部/n_new/12.74#白王/n_new/12.68#炼金/n_new/11.75#
# <type 'str'>def getNewWordsByNLPIR(text, number):txt1 = GetNewWords(text, c_int(number), [c_char_p, c_int, c_bool])txt2 = txt1.split('#')txt3 = []txt4 = []txt5 = []for item2 in txt2:txt3.append(item2.encode('utf-8').split('/'))if txt3 != []:txt4.append(txt3)txt3 = []for i in txt4:for j in i:if j[0] != [] and j[0] != '':txt5.append(j[0])return txt5strs1 = getNewWordsByNLPIR(text, 10)
for i in strs1:print ifor t in txt:seg_list.append(t[0].encode('utf-8'))# 去除停用词
def NLPIRclearText(seg_list):mywordlist = []liststr = "/ ".join(seg_list)f_stop = open(stopwords_path)try:f_stop_text = f_stop.read()f_stop_text = unicode(f_stop_text, 'utf-8')finally:f_stop.close()f_stop_seg_list = f_stop_text.split('\n')for myword in liststr.split('/'):if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:mywordlist.append(myword)return ''.join(mywordlist)# 去除完停用词的文本
strs = NLPIRclearText(seg_list)
# print s
font_path = r'C:\Windows\Fonts\simfang.ttf'  # 为worldcloud设置中文字体路径没# 设置词云属性
wc = WordCloud(font_path=font_path,  # 设置字体background_color="white",  # 背景颜色max_words=200,  # 词云显示的最大词数max_font_size=100,  # 字体最大值random_state=42,width=1000, height=860, margin=2,  # 设置图片默认的大小,但是如果使用背景图片的话,那么保存的图片大小将会)# 因为NLPIR在处理中文时,会自动修改文本编码,所以在使用worldcloud时需要修改文本编码
# 否则会造成:无法在wordcloud中显示NLPIR分词后的汉语词语,而只能显示其中的英文wc.generate(unicode(strs, encoding='utf8'))plt.imshow(wc)
plt.axis("off")
plt.show()wc.to_file('test001.png')

Python NLPIR2016 与 wordcloud 结合生成中文词云相关推荐

  1. python删除中文停用词_python词云 wordcloud+jieba生成中文词云图

    简介 Python+jieba+wordcloud+txt+gif生成动态中文词云 本文基于爬虫爬取某微信号三个月的文章为例,展示了生成中文词云的完整过程.本文需要的两个核心Python类库: jie ...

  2. python——wordcloud生成中文词云

    毕设中期答辩,想展示一下前期数据抓取和聚类的成果,感觉词云这种形式不错,于是简单学习了一下wordcloud. 首先是安装 我是使用pip直接安装的, pip install wordcloud 没有 ...

  3. python词云 wordcloud+jieba生成中文词云图

    简介 Python+jieba+wordcloud+txt+gif生成动态中文词云 本文基于爬虫爬取某微信号三个月的文章为例,展示了生成中文词云的完整过程.本文需要的两个核心Python类库: jie ...

  4. 封装汉语自然语言处理中的常用方法(附代码:生成中文词云)

    前叙 该文章写作共花费二十分钟,阅读只需要七分钟左右,读完该文章后,你将学会使用少量代码,将中文小说,中文新闻,或者其他任意一段中文文本生成词云图 背景 在进行汉语自然语言处理时候,经常使用的几个方法 ...

  5. python生成中文词云的代码_[python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写...

    1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意 ...

  6. Python + wordcloud + jieba 十分钟学会生成中文词云

    前述 本文需要的两个Python类库 jieba:中文分词分词工具 wordcloud:Python下的词云生成工具 写作本篇文章用时一个小时半,阅读需要十分钟,读完该文章后你将学会如何将任意中文文本 ...

  7. Python 爬取生成中文词云以爬取知乎用户属性为例

    代码如下: # -*- coding:utf-8 -*-import requests import pandas as pd import timeimport matplotlib.pyplot ...

  8. python爬取数据生成词云_Python 爬取生成中文词云以爬取知乎用户属性为例

    代码如下: # -*- coding:utf-8 -*- import requests import pandas as pd import time import matplotlib.pyplo ...

  9. 基于python的词云生成-中文词云(指定词云形状)

    基于python的词云生成(二) 1.简介    本文是在基于python的词云生成(一)的基础上,进一步对云词进行编写,本文还使用了jieba分词对中文进行分词处理,以做出更好的效果.    jie ...

最新文章

  1. 网课谁的最好_报补习班,还是“上网课”?利用课余时间提高成绩,网课更加适合...
  2. linux文件系统挂载磁盘,linux – 无法挂载磁盘(VFS:找不到ext4文件系统)
  3. 数学之美系列12(转帖)
  4. webpack4.x最详细入门讲解
  5. [转载] Java获取泛型T的类型 T.class
  6. 飞步科技三篇论文入选CVPR 2022
  7. Linux命令kill和signal
  8. 被低估的“败家爷们”
  9. mysql xa测试方案_mysql xa导致的事务一直running问题
  10. Node.js + Express 4+angularjs随笔小记,不供参考
  11. case when的几种用法
  12. ERP应用优势和劣势有哪些
  13. Codeblocks 深色主题背景设置、美化界面
  14. 【QT Creator学习记录】(一)上位机与下位机串口通信
  15. oracle 2019 ocp,2019 OCP简介
  16. STM32点亮led的详细步骤
  17. 带有默认参数值的构造函数
  18. 关于参加大数据培训机构有没有用的一些想法
  19. 每天学一点英文:Espresso 20210817
  20. 关于深度学习的8大免费必读经典书目推荐!

热门文章

  1. libevent简介和使用【转】
  2. 黑莓GPRS上网套餐包月 300MB流量 不限CMWAP/CMNET
  3. 我是如何面试别人List相关知识的
  4. JVM:jstack
  5. JVM:GC日志解读
  6. 遇到的一些小的tips
  7. Android --- .gradle文件夹的路径
  8. 第十届蓝桥杯java B组—试题D 数的分解
  9. 数据结构-简单实现二叉树的先序、中序、后序遍历(java)
  10. 下列设备中 微型计算机系统必须具备的是,计算机应用基础题库