Python结巴中文分词工具使用过程中遇到的问题及解决方法


Posted in Python onApril 15, 2017

本文实例讲述了Python结巴中文分词工具使用过程中遇到的问题及解决方法。分享给大家供大家参考,具体如下:

结巴分词是Python语言中效果最好的分词工具,其功能包括:分词、词性标注、关键词抽取、支持用户词表等。这几天一直在研究这个工具,在安装与使用过程中遇到一些问题,现在把自己的一些方法帖出来分享一下。

官网地址:https://github.com/fxsjy/jieba

1、安装。

按照官网上的说法,有三种安装方式,

第一种是全自动安装:easy_install jieba 或者 pip install jieba,可是并没有找到它提供这个安装程序。

第二种方法是半自动安装:先下载http://pypi.python.org/pypi/jieba/ ,解压后在cmd命令行中运行 python setup.py install。这里需要注意的是,默认情况下,不能在cmd中直接运行python命令,需要把它的路径加入到环境变量path中方可。我试过,可行。但是 这种方法安装之后,结巴分词功能只能在Python自带的IDLE中使用。在含有PyDEV的MyEclipse中不能执行“import jieba”命令,所以继续尝试第三种方法。

第三种方法是手动安装:将jieba目录放置于当前目录或者site-packages目录。把下载到的jieba-0.30.zip解压后,里面有个jibba的文件夹,把它复制到与你的Python程序相同的位置,这样在程序中就可以执行“import jieba”了。

2、关于分词的实现

官网提供了分词的基本用法示例 :

#encoding=utf-8
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print "Full Mode:", "/ ".join(seg_list) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print "Default Mode:", "/ ".join(seg_list) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print ", ".join(seg_list)
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print ", ".join(seg_list)

程序可以执行,但是在MyEclipse中显示中文为Unicode编码,这不科学。

但是继续执行另一个词性标注的示例却非常正常:

import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for w in words:
  print w.word, w.flag

所以我就想去分析一下它的源代码,结果发现在jiba/_init_.py文件(这是实现分词的文件)的第209行(cut函数)中有关于检查编码的语句块:

if not isinstance(sentence, unicode):
  try:
   sentence = sentence.decode('utf-8')
  except UnicodeDecodeError:
   sentence = sentence.decode('gbk','ignore')

而在jieba/posseg/_init_.py文件(这是实现词性标注的文件)第158行的cut函数中却没有发现此类代码。所以我猜想,前者有检查编码的代码就出现乱码,而后者没有检查编码的代码而正常显示,所以就把前者检查编码的代码给注释了,结果程序执行报错,只好又把人家的源码还原,结果中文又正常显示了!

运行效果如下图:

Python结巴中文分词工具使用过程中遇到的问题及解决方法

以上只是对固定的中文字符串变量进行分词和词性标注,接下来的文章里我会尝试从文件中读取中文进行分词和词性标注。

更多关于Python相关内容可查看本站专题:《Python字典操作技巧汇总》、《Python字符串操作技巧汇总》、《Python常用遍历技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python入门与进阶经典教程》

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

Python 相关文章推荐
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Python星号*与**用法分析
Feb 02 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
Python工厂函数用法实例分析
May 14 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
python保存log日志,实现用log日志画图
Dec 24 Python
python无序链表删除重复项的方法
Jan 17 Python
python 命名规范知识点汇总
Feb 14 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
python使用pygame创建精灵Sprite
Apr 06 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 #Python
Python编程判断一个正整数是否为素数的方法
Apr 14 #Python
python编程实现归并排序
Apr 14 #Python
python实现折半查找和归并排序算法
Apr 14 #Python
Python+Wordpress制作小说站
Apr 14 #Python
Python 中 list 的各项操作技巧
Apr 13 #Python
简单的python后台管理程序
Apr 13 #Python
You might like
精通php的十大要点(上)
2009/02/04 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
python获取目录下所有文件的方法
2015/06/01 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
如何通过Python实现标签云算法
2019/07/02 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
Why do we need Unit test
2013/01/03 面试题
Python里面如何实现tuple和list的转换
2012/06/13 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书