Python基于jieba库进行简单分词及词云功能实现方法


Posted in Python onJune 16, 2018

本文实例讲述了Python基于jieba库进行简单分词及词云功能实现方法。分享给大家供大家参考,具体如下:

目标:

1.导入一个文本文件
2.使用jieba对文本进行分词
3.使用wordcloud包绘制词云

环境:

Python 3.6.0 |Anaconda 4.3.1 (64-bit)

工具:

jupyter notebook

从网上下载了一篇小说《老九门》,以下对这篇小说进行分词,并绘制词云图。

分词使用最流行的分词包jieba,参考:https://github.com/fxsjy/jieba

或点击此处本站下载jieba库

词云使用wordcloud包,参考:https://github.com/amueller/word_cloud

或点击此处本站下载wordcloud库

这两个包都不是anaconda自带的,需要按官网的步骤安装。

import wordcloud as wc
import jieba
import matplotlib.pyplot as plt
from scipy.misc import imread
%matplotlib inline
plt.rc('figure', figsize=(15, 15))

首先读取文件,保存到一个字符串对象中。

all_text = open(file='老九门.txt', encoding='utf-8').read()

查看一下字符串的内容,发现其中有很多多余的字符:'\n'、'\u3000'。

all_text

'\ufeff《盗墓笔记》中,一段与二月红有关的故事。\n《老九门》壹:二月红①\n丝帐许久没有换过了。\n\u3000\u3000她半夜入不了眠,睁开眼睛,便看到床边垂下的帐面,在月光下看着有一死暗淡。原来可是丝丝的带着光亮,好像最白的银拉出来的丝一般。\n\u3000\u3000果然再好的东西,也总是由好往坏了去。\n\u3000\u3000以往一过立秋,... ...<以下省略>

在分词之前先把这些多余字符剔除掉。

all_text = all_text.replace('\n', '' )
all_text = all_text.replace('\u3000', '')

下面先尝试做一次分词,把所有分词用空格分开,输出看一下分词的结果:

seg_list = jieba.cut(all_text, cut_all=False)
words =' '
for seg in seg_list:
  words = words + seg + ' '
print(words)

  《 盗墓 笔记 》 中 , 一段 与 二月 红 有关 的 故事 。 《 老 九门 》 壹 : 二月 红 ① 丝帐 许久 没有 换过 了 。 她 半夜 入 不了 眠 , 睁开眼睛 , 便 看到 床边 垂下 的 帐面 , 在 月光 下 看着 有 一死 暗淡 。 原来 可是 丝丝 的 带 着 光亮 , 好像 最白 的 银拉 出来 的 丝 一般 。 果然 再 好 的 东西 , 也 总是 由 好 往坏 了 去 。 以往 一过 立秋 , 她 就 会 亲自 拆 下 这块 帐头 , 亲自 去 漂洗 , 她 知道 这 东西 的 脾气 , 得 小心 伺候 着 , 一寸 一寸 地过 水 。 如今 不让 她 下床 , 这 东西 没 人 伺候 了 , 倒 也 显得 越来越 不值 当 被 这么 细心 对待 起来 。 也许 , 下 一个 立秋 的 时候 , 才 有人 敢动 这个 东西 , 但 那个 人 , 必然 不是 自己 了 。 中午 大夫 和 他 说 的 那些 话 , 虽然 是 在 屋外 , 但是 她 还是 听到 了 几分 , 自己 的 病 , 不 知道 还有 多少 日子 可熬 。 她 舒 了 口气 , 胸中 的 那丝 痛楚 似乎 好 了 一些 。 多少 日
... ...<以下省略>

从分词结果里可以发现,有一些固定词语,例如“盗墓笔记”、“老九门”、“二月红”、“张大佛爷”、“齐铁嘴”等书名、人名被分开了。在这篇小说的环境下,这些才成为固定词语,而默认的分词策略根据通常的认识来分词的。

针对这个情况,jieba有一个“用户词典”的机制,把用户认为应该成为整词的,放到词典里,在分词的时遇到它们,就会当作一个整体。

在目录下新建一个文本文件dick.txt,输入以下词语:

老九门
二月红
盗墓笔记
张大佛爷
解九爷
解九
狗五

以下为jieba引入这个词典文件,再做一次分词:

jieba.load_userdict('dict.txt')
all_seg = jieba.cut(all_text, cut_all=False)
all_word =' '
for seg in all_seg:
  all_word = all_word + seg + ' '
print(all_word)

  《 盗墓笔记 》 中 , 一段 与 二月红 有关 的 故事 。 《 老九门 》 壹 : 二月红 ① 丝帐 许久 没有 换过 了 。 她 半夜 入 不了 眠 , 睁开眼睛 , 便 看到 床边 垂下 的 帐面 , 在 月光 下 看着 有 一死 暗淡 。 原来 可是 丝丝 的 带 着 光亮 , 好像 最白 的 银拉 出来 的 丝 一般 。 果然 再 好 的 东西 , 也 总是 由 好 往坏 了 去 。 以往 一过 立秋 , 她 就 会 亲自 拆 下 这块 帐头 , 亲自 去 漂洗 , 她 知道 这 东西 的 脾气 , 得 小心 伺候 着 , 一寸 一寸 地过 水 。 如今 不让 她 下床 , 这 东西 没 人 伺候 了 , 倒 也 显得 越来越 不值 当 被 这么 细心 对待 起来 。 也许 , 下 一个 立秋 的 时候 , 才 有人 敢动 这个 东西 , 但 那个 人 , 必然 不是 自己 了 。 中午 大夫 和 他 说 的 那些 话 , 虽然 是 在 屋外 , 但是 她 还是 听到 了 几分 , 自己 的 病 , 不 知道 还有 多少 日子 可熬 。 她 舒 了 口气 , 胸中 的 那丝 痛楚 似乎 好 了 一些 。 多少 日子 了 ?
... ...<以下省略>

从这个结果来看,就不会再把人名、书名分开了。

以下开始制作词云。

制作词云,使用的是wordcloud包,由两个参数需要特别注意,一个是字体,一个是背景图片。字体好理解,就不解释了。背景图片,是词云显示的背景形状。这里选用了一个心形图案。

Python基于jieba库进行简单分词及词云功能实现方法

以下是词云制作过程:

# 引入字体
font=r"C:\WINDOWS\Fonts\simhei.ttf"
#读取背景图片,生成矩阵
color_mask = imread("love.jpg")
# 生成词云对象,设置参数
cloud = wc.WordCloud( font_path=font,#设置字体
           background_color="black", #背景颜色
           max_words=2000,# 词云显示的最大词数
           mask=color_mask,#设置背景图片
           max_font_size=100, #字体最大值
           random_state=42)
# 绘制词云图
mywc = cloud.generate(all_word)
plt.imshow(mywc)

<matplotlib.image.AxesImage at 0x1ecebf5e588>

Python基于jieba库进行简单分词及词云功能实现方法

# 把词云图保存到磁盘文件中
mywc.to_file('老九门wordcloud.png')

<wordcloud.wordcloud.WordCloud at 0x1ece4b9bc88>

以上就是使用python进行分词,并绘制词云图的简单操作。对于jieba和wordcloud的更高级的使用方法,还需要进一步研究和学习。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
Python实现树的先序、中序、后序排序算法示例
Jun 23 Python
python 整数越界问题详解
Jun 27 Python
python tkinter图形界面代码统计工具
Sep 18 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
python3中rank函数的用法
Nov 27 Python
python使用rsa非对称加密过程解析
Dec 28 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
Python的这些库,你知道多少?
Jun 09 Python
Django Paginator分页器的使用示例
Jun 23 Python
Python实现简单的文本相似度分析操作详解
Jun 16 #Python
Django跨域请求问题的解决方法示例
Jun 16 #Python
Python for循环生成列表的实例
Jun 15 #Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 #Python
Python对象属性自动更新操作示例
Jun 15 #Python
numpy使用fromstring创建矩阵的实例
Jun 15 #Python
详解Python 协程的详细用法使用和例子
Jun 15 #Python
You might like
php5 图片验证码实现代码
2009/12/11 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
php在线代理转向代码
2012/05/05 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
Python爬虫代理IP池实现方法
2017/01/05 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
python面向对象 反射原理解析
2019/08/12 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
Python实现京东抢秒杀功能
2021/01/25 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
心理健康心得体会
2014/01/02 职场文书
个人自我鉴定总结
2014/03/25 职场文书
个人借款担保书
2014/04/02 职场文书
另类冲刺标语
2014/06/24 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
音乐教师个人总结
2015/02/06 职场文书
小学入学感言
2015/08/01 职场文书