相比英语等语言,用中文写成的文章往往更难分词。英语文章可以用空格来进行单次的区分,而中文词组则连成一片。让机器将中文词组分离的难度远大于在文言文分词题挣扎的我们,而Python的第三方库jieba就是用来处理这个问题的,让机器也能分离中文词组。
相比于其他免费中文分词库,jieba是更加成熟的。
pip install jieba
- 精准模式 试图将句子最精确地切开,适合文本分析,是jieba的默认分词模式。
- 搜索引擎模式 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
- 全模式 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。
上述内容引用自jieba官网
像是公司名,地名,这类词也能够被jieba识别出来。
新词的含义是指在训练jieba时,没有出现在数据集中的词。新词识别基于Viterbi算法。
jieba.cut(sentence, cut_all=False, HMM=True, use_paddle=False)
sentence: 需要进行分词的语句
cut_all: 是否开启全模式,取值为布尔值,默认为精准模式。
HMM与use_paddle可以先不理会,使用默认模式即可。
示例:
import jieba
text = '也是微云,也是微云过后月光明。只不见去年的游伴,只没用当日的心情。不愿勾起相思,不敢出门看月。\
偏偏月进窗来,害我相思一夜。'
# 精准模式
result = jieba.cut(text)
print(list(result))
result -----> ['也', '是', '微云', ',', '也', '是', '微云', '过后', '月', '光明', '。',
'只', '不见', '去年', '的', '游伴', ',', '只', '没用', '当日', '的', '心情', '。', '不愿',
'勾起', '相思', ',', '不敢', '出门', '看', '月', '。', '偏偏', '月', '进窗', '来', ',', '害',
'我', '相思', '一夜', '。']
import jieba
text = '也是微云,也是微云过后月光明。只不见去年的游伴,只没用当日的心情。不愿勾起相思,不敢出门看月。\
偏偏月进窗来,害我相思一夜。'
# 全模式
result = jieba.cut(text, cut_all=True)
print(list(result))
result -----> ['也', '是', '微云', ',', '也', '是', '微云', '过后', '月光', '光明', '。'
, '只', '不见', '去年', '的', '游伴', ',', '只', '没用', '当日', '的', '心情', '。',
'不', '愿', '勾起', '相思', ',', '不敢', '敢出', '出门', '看', '月', '。', '偏偏',
'月', '进', '窗', '来', ',', '害', '我', '相思', '一夜', '。']
jieba.cut_for_search(sentence, HMM=True)
sentence: 需要进行分词的语句
import jieba
text = '也是微云,也是微云过后月光明。只不见去年的游伴,只没用当日的心情。不愿勾起相思,不敢出门看月。\
偏偏月进窗来,害我相思一夜。'
# 搜索引擎模式
result = jieba.cut_for_search(text)
print(list(result))
result ------> ['也', '是', '微云', ',', '也', '是', '微云', '过后', '月', '光明', '。',
'只', '不见', '去年', '的', '游伴', ',', '只', '没用', '当日', '的', '心情', '。', '不愿',
'勾起', '相思', ',', '不敢', '出门', '看', '月', '。', '偏偏', '月', '进窗', '来', ',',
'害', '我', '相思', '一夜', '。']
月光明
精准模式: 月,光明
全模式: 月光,光明
而精准模式是将词频(由训练的数据集决定,也可人为更改)更高的词组展示出来,不会重复使用同一个字。
开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率。
用法: jieba.load_userdict(file_name) # file_name为自定义词典的路径
词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),用空格隔开。
上述内容引用自jieba官网
例如:
注:
使用jieba.tokenize()时,使用的分词模式为精准模式。
原理:将目标文本按行分隔后,把各行文本分配到多个python进程并行分词,然后归并结果,从而获得分词速度的可观提升
基于python自带的multiprocessing模块,目前暂>不支持windows
用法:
jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数
jieba.disable_parallel() # 关闭并行分词模式
上述内容引用自jieba官网
jieba采用延迟加载,"import jieba"不会立即触发词典的加载,一旦有必要才开始加载词典构建trie。如果你想手工初始jieba,也可以手动初始化。
import jieba
jieba.initialize() # 手动初始化(可选)
延迟加载机制仅在jieba的0.28版本及后续版本中生效。
上述内容整理自jieba官网
jieba的常用功能已讲解完毕,如果想对jieba有更多的了解,可以访问其官网。
码云:https://gitee.com/fxsjy/jieba
Github: https://github.com/joelost/jieba