随着NLP 技术的成熟,开源的分词工具越来越多,下面主要学习Jieba分词这一工具的操作。
一、三种分词模式
import jieba sent = '中文分词是文本处理不可或缺的一步!' seg_list = jieba.cut(sent, cut_all=True) print('全模式:', '/ ' .join(seg_list)) seg_list = jieba.cut(sent, cut_all=False) print('精确模式:', '/ '.join(seg_list)) seg_list = jieba.cut(sent) print('默认精确模式:', '/ '.join(seg_list)) seg_list = jieba.cut_for_search(sent) print('搜索引擎模式', '/ '.join(seg_list)) 全模式: 中文/ 分词/ 是/ 文本/ 文本处理/ 本处/ 处理/ 不可/ 不可或缺/ 或缺/ 的/ 一步/ / 精确模式: 中文/ 分词/ 是/ 文本处理/ 不可或缺/ 的/ 一步/ ! 默认精确模式: 中文/ 分词/ 是/ 文本处理/ 不可或缺/ 的/ 一步/ ! 搜索引擎模式 中文/ 分词/ 是/ 文本/ 本处/ 处理/ 文本处理/ 不可/ 或缺/ 不可或缺/ 的/ 一步/ !
1.精确模式:将句子最精确的分开,适合文本分析
2.全模式:将句,子中所有可以成词的词语都扫描出来,速度快,但不能解决歧义
3.搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合搜索引擎分词
注意:jieba.cut返回的结构是一个可迭代的生成器(关于Python生成器的知识见下一篇文章),需用for循环来获得分词后得到的每一个词语。如果需要分词的句子较短,我们希望得到一个list,则可以用jiaba.lcut函数来实现,它对cut的结果做了封装,l代表list,返回一个list集合。
sent = '中文分词是文本处理不可或缺的一步!'
seg_list = jieba.cut(sent,cut_all=False)
print(seg_list)
<generator object Tokenizer.cut at 0x07C68F00>
sent = '中文分词是文本处理不可或缺的一步!'
seg_list = jieba.lcut(sent,cut_all=False)
print(seg_list)
['中文', '分词', '是', '文本处理', '不可或缺', '的', '一步', '!']
二、获取词性
词性属于词汇的语法范畴,也被称为词类。词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。下演示用jieba.posseg模块实现词性标注
sent = '中文分词是文本处理不可或缺的一步!'
#用lcut生成列表
import jieba.posseg as psg
print([(x.word,x.flag) for x in psg.lcut(sent)])
[('中文', 'nz'), ('分词', 'n'), ('是', 'v'), ('文本处理', 'n'), ('不可或缺', 'l'), ('的', 'uj'), ('一步', 'm'), ('!', 'x')]
#用cut生成器
seg_list = psg.cut(sent)
print(' '.join(['{0}/{1}'.format(w,t) for w,t in seg_list]))
中文/nz 分词/n 是/v 文本处理/n 不可或缺/l 的/uj 一步/m !/x