上一章分享了IK Analyzer中文分词及词频统计基于Hadoop的MapReducer框架Java实现。此次将与你们分享Jieba中文分词Python简单实现,因为Jieba分词是基于词频最大切分组合,因此不用作词频统计,能够直接获得其关键字。python
一、安装jiebaapp
安装方式能够查看博主的中文分词工具(http://my.oschina.net/eager/blog/673013),此处再也不赘述。框架
二、简单实例实现:eclipse
#导入jieba
import jiebapython2.7# ---------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)) # 搜索引擎模式工具
三、采用精确模式对hong.txt作分词并写入文件hong2.txtoop
# coding:UTF8
'''
@author: ZD
'''
import sys
#修改编码以前,Python2.7系统默认编码是ascii
print(sys.getdefaultencoding())
#修改编码为utf-8
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())搜索引擎import jieba, codecs编码
fpr = codecs.open("hong.txt","r")
lines = fpr.readlines()
resultStr=""
for line in lines:
resultStr += linespa#精确模式分词,但没有统计结果并排序
seg_list = jieba.cut(resultStr, cut_all=False)
fpr.close()print("开始写文件")
fpw = codecs.open("hong2.txt", "w")
result=""
for segStr in seg_list:
result=segStr+" \\ "
fpw.write(result)
fpw.close()
print("写文件结束")
一部分结果展现:
\ 上卷 \ \ 第一回 \ \ \ 甄士隐 \ 梦幻 \ 识通灵 \ \ 贾雨村 \ 风尘 \ 怀 \ 闺秀 \ \ \ \ \ 此 \ 开卷 \ 第一回 \ 也 \ . \ 做者 \ 自云 \ : \ 因曾 \ 历过 \ 一番 \ 梦幻 \ 以后 \ , \ 故 \ 将 \ 真事 \ 隐去 \ , \ 而 \ 借 \ " \ 通灵 \ " \ 之 \ 说 \ , \ 撰此 \ 《 \ 石头记 \ 》 \ 一书 \ 也 \ . \ 故曰 \ " \ 甄士隐 \ " \ 云云 \ . \ 但书中 \ 所记 \ 何事 \ 何人 \ ? \ 自又云 \ : \ “ \ 今 \ 风尘碌碌 \ , \ 一事无成 \ , \ 忽 \ 念及 \ 当日 \ 全部 \ 之 \ 女子 \ , \ 一一 \ 细考 \ 较 \ 去 \ , \ 觉其 \ 行止 \ 见识 \ , \ 皆 \ 出于 \ 我 \ 之上 \ . \ 何 \ 我 \ 堂堂 \ 须眉 \ , \ 诚不若 \ 彼 \ 裙钗 \ 哉 \ ? \ 实愧 \ 则 \ 有余 \ , \ 悔 \ 又 \ 无益 \ 之大 \ 无可如何 \ 之日 \ 也 \ ! \ 当 \ 此 \ , \ 则 \ 自欲 \ 将 \ 已往 \ 所赖 \ 天恩祖 \ 德 \ , \ 锦衣 \ 纨绔 \ 之 \ 时 \ , \ 饫甘餍肥 \ 之 \ 日 \ , \ 背 \ 父兄 \ 教育 \ 之恩 \ , \ 负 \ 师友 \ 规谈 \ 之德 \ , \ 以致 \ 今日 \ 一技无成 \ , \ 半生 \ 潦倒 \ 之罪 \ , \ 编述 \ 一集 \ , \ 以告 \ 天下人 \ : \ 我 \ 之 \ 罪固 \ 难免 \ , \ 然 \ 闺阁 \ 中本 \ 自 \ 历历 \ 有人 \ , \ 万 \ 不可 \ 因 \ 我 \ 之 \ 不肖 \ , \ 自护己 \ 短 \ , \ 一并 \ 使 \ 其 \ 泯灭 \ 也 \ . \ 虽 \ 今日 \ 之茅 \ 椽蓬 \ 牖 \ , \ 瓦灶 \ 绳床 \ , \ 其 \ 晨夕 \ 风露 \ , \ 阶柳庭花 \ , \ 亦 \ 未有 \ 妨 \ 我 \ 之 \ 襟怀 \ 笔墨 \ 者 \ . \ 虽 \ 我 \ 未学 \ , \ 下笔 \ 无文 \ , \ 又 \ 何妨 \ 用 \ 假语 \ 村言 \ , \ 敷 \ 演出 \ 一段 \ 故事 \ 来 \ , \ 亦可 \ 使 \ 闺阁 \ 昭传 \ , \ 复可悦 \ 世之目 \ , \ 破人 \ 愁闷 \ , \ 不 \ 亦 \ 宜乎 \ ? \ " \ 故曰 \ " \ 贾雨村 \ " \ 云云 \ . \
五、若是想获得出现频率最高的词语,则能够用 jieba.analyse.extract_tags(sentence, topK) 方法
PS:其中sentence为待提取的文本,topK为返回几个TF/IDF权重最大的关键词,默认值为20
# coding:UTF8
'''
@author: ZD
'''
import sys
#修改编码以前,Python2.7系统默认编码是ascii
print(sys.getdefaultencoding())
#修改编码为utf-8
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())import jieba, codecs
fpr = codecs.open("hong.txt","r")
lines = fpr.readlines()
resultStr=""
for line in lines:
resultStr += line#精确模式分词,但没有统计结果并排序
seg_list = jieba.cut(resultStr, cut_all=False)
fpr.close()print("开始写文件")
fpw = codecs.open("hong2.txt", "w")
result=""
for segStr in seg_list:
result=segStr+" \\ "
fpw.write(result)
fpw.close()
print("写文件结束")
部分结果展现
宝玉 贾母 凤姐 王夫人 老太太 奶奶 那里 什么 贾琏 太太 姑娘 众人 平儿 说道 现在 一面 大家 袭人 宝钗 只见 黛玉 这里 咱们 一个 听见 出来 凤姐儿 薛姨妈
分享踩过的坑
问题:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
缘由:python2.7是基于ascii去处理字符流,当字符流不属于ascii范围内,就会抛出异常(ordinal not in range(128))。
解决方案1:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
若是eclipse报错为undefined variable from import:setdefaultencoding,是由于eclipse的pydev插件缘由,能够无论此错误,照样运行。
解决方案2:(http://blog.csdn.net/lgy807720302/article/details/7515743)
在Python安装目录下的Lib/site-packages目录中,新建一个sitecustomize.py文件
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
try:
import apport_python_hook
except ImportError:
pass
else:
apport_python_hook.install()
而后在eclipse中能够查看到改变已经生效
import sys
print(sys.getdefaultencoding())
写在最后:本人初学Python,也初次接触jieba分词工具,若有错误,望指出纠正。