为了让计算机更容易理解文本,通常中文信息处理的第一步是中文分词。中文分词是在中文句子中的词与词之间加上边界标记。
特点
支持 4 种分词模式:
- 精确模式:试图将句子 最精确地切开 ,适合文本分析。
- 全模式:把句子中 所有可以成词的词语都扫描出来 ,速度非常快,但是不能解决歧义。
- 搜索引擎模式: 在精确模式的基础上,对长词再次切分 ,提高召回率,适合用于搜索引擎分词。
- paddle模式: 不必安装额外类库,可直接在 jieba 中使用。
原资料: paddle模式:利用
PaddlePaddle
深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。paddle模式
使用需安装paddlepaddle-tiny
,pip install paddlepaddle-tiny==1.6.1
。目前paddle模式
支持jieba v0.40
及以上版本。jieba v0.40
以下版本,请升级jieba,pip install jieba --upgrade
。PaddlePaddle官网 (https://www.paddlepaddle.org.cn/)
原资料: paddle模式在较新版本的Python中无法使用。Google关键词paddlepaddle-tiny,第二个链接就是jieba分词中的issue,指出paddlepaddle-tiny仅支持到python 3.7。python官网显示最新的版本为python 3.7.13但是conda不支持,使用conda search命令发现最新支持到python 3.7.10
四种分词模式
import jieba
# import paddle
# paddle.enable_static()
str_text = '我来到北京清华大学'
print(str_text)
我来到北京清华大学
精确模式:
jieba.lcut(str_text)
['我', '来到', '北京', '清华大学']
全模式:
jieba.lcut(str_text, cut_all=True)
['我', '来到', '北京', '清华', '清华大学', '华大', '大学']
搜索引擎模式:
jieba.lcut_for_search(str_text)
['我', '来到', '北京', '清华', '华大', '大学', '清华大学']
Paddle模式:
jieba.lcut(str_text, use_paddle=True)
['我', '来到', '北京', '清华大学']
函数说明
jieba.cut
方法接受四个输入参数: 需要分词的字符串;cut_all
参数用来控制是否采用全模式;HMM
参数用来控制是否使用 HMM 模型;use_paddle
参数用来控制是否使用paddle分词模式,paddle模式采用延迟加载方式,通过enable_paddle接口安装paddlepaddle-tiny,并且import
相关代码;jieba.cut_for_search
方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8jieba.cut
以及jieba.cut_for_search
返回的结构都是一个可迭代的 generator,可以使用for
循环来获得分词后得到的每一个词语(unicode),或者用jieba.lcut
以及jieba.lcut_for_search
直接返回列表jieba.Tokenizer(dictionary=DEFAULT_DICT)
新建自定义分词器,可用于同时使用不同词典。jieba.dt
为默认分词器,所有全局分词相关函数都是该分词器的映射。
代码示例如下:
import jieba,math
import jieba.analyse
# import paddle
# paddle.enable_static()# 启动paddle模式。 0.40版之后开始支持,早期版本不支持
str_text="长春地处中国东北地区,位于东北的地理中心,别称北国春城。"
全模式 cut_all=True
:
str_quan1=jieba.cut(str_text,cut_all=True)
print('全模式分词:{ %d}' % len(list(str_quan1)))
str_quan2=jieba.cut(str_text,cut_all=True)
print("/".join(str_quan2))
全模式分词:{ 19} 长春/春地/地处/中国/东北/东北地区/北地/地区/,/位于/东北/的/地理/中心/,/别称/北国/春城/。
精准模式cut_all=False,默认即是:
str_jing1=jieba.cut(str_text,cut_all=False)
print('精准模式分词:{ %d}' % len(list(str_jing1)))
str_jing2=jieba.cut(str_text,cut_all=False)
print("/".join(str_jing2))
精准模式分词:{ 15} 长春/地处/中国/东北地区/,/位于/东北/的/地理/中心/,/别称/北国/春城/。
搜索引擎模式 cut_for_search
:
str_soso1=jieba.cut_for_search(str_text)
print('搜索引擎分词:{ %d}' % len(list(str_soso1)))
str_soso2=jieba.cut_for_search(str_text)
print("/".join(str_soso2))
搜索引擎分词:{ 18} 长春/地处/中国/东北/北地/地区/东北地区/,/位于/东北/的/地理/中心/,/别称/北国/春城/。
使用paddle模式 use_paddle=True
:
seg_list = jieba.cut(str_text,use_paddle=True)
print('Paddle 模式分词:{ %d}' % len(list(seg_list)))
seg_list2 = jieba.cut(str_text,use_paddle=True)
print( '/'.join(list(seg_list2)))
Paddle 模式分词:{ 15} 长春/地处/中国/东北地区/,/位于/东北/的/地理/中心/,/别称/北国/春城/。
str_text = '''其一,中国的城市,包括直辖市、副省级市、普通地级市、县级市,但不包括县。
正如《中国城市大趋势》一书所分析的,县与县级市虽然级别相同,但定位有巨大差别。县是以农业为基础的管理单元,县级市则以工商业为主。
对于县,地级市进行直管;对于县级市,地级市则只是代管。
名义之别,导致了县级市与其所在地级市,均被视为独立城市,从而单薄市级层面的人口规模,如昆山与苏州,晋江与泉州,义乌与金华。
其二,衡量城市规模,看的是城区人口,而非全市人口。
城区人口,顾名思义,不包括镇区及乡村人口,明显低于全市常住人口。城区人口占全市人口比例最高可达9成以上,最低甚至不到20%。
凡是城镇化率不高的地区,或者下辖县乡过多的城市,即使全市人口迈过了千万大关,也未必能晋级为超大特大城市。
02
7个超大城市:4大一线+成渝津
超大城市,是我国城市规模层级的金字塔尖城市。
目前,我国共有7个超大城市,除了北上广深四大一线城市,还有重庆、天津两大直辖市,以及成都。'''
print(jieba.lcut(str_text))
['其一', ',', '中国', '的', '城市', ',', '包括', '直辖市', '、', '副', '省级', '市', '、', '普通', '地级市', '、', '县级市', ',', '但', '不', '包括', '县', '。', '\n', '\n', '正如', '《', '中国', '城市', '大', '趋势', '》', '一书', '所', '分析', '的', ',', '县', '与', '县级市', '虽然', '级别', '相同', ',', '但', '定位', '有', '巨大', '差别', '。', '县', '是', '以', '农业', '为', '基础', '的', '管理', '单元', ',', '县级市', '则', '以', '工商业', '为主', '。', '\n', '\n', '对于', '县', ',', '地级市', '进行', '直管', ';', '对于', '县级市', ',', '地级市', '则', '只是', '代管', '。', '\n', '\n', '名义', '之别', ',', '导致', '了', '县级市', '与其', '所在', '地级市', ',', '均', '被', '视为', '独立', '城市', ',', '从而', '单薄', '市级', '层面', '的', '人口', '规模', ',', '如', '昆山', '与', '苏州', ',', '晋江', '与', '泉州', ',', '义乌', '与', '金华', '。', '\n', '\n', '其二', ',', '衡量', '城市', '规模', ',', '看', '的', '是', '城区', '人口', ',', '而', '非', '全市', '人口', '。', '\n', '\n', '城区', '人口', ',', '顾名思义', ',', '不', '包括', '镇区', '及', '乡村人口', ',', '明显', '低于', '全市', '常住人口', '。', '城区', '人口', '占', '全市', '人口比例', '最高', '可达', '9', '成', '以上', ',', '最低', '甚至', '不到', '20%', '。', '\n', '\n', '凡是', '城镇化率', '不高', '的', '地区', ',', '或者', '下辖', '县乡', '过多', '的', '城市', ',', '即使', '全市', '人口', '迈过', '了', '千万', '大关', ',', '也', '未必', '能', '晋级', '为', '超大', '特大城市', '。', '\n', '\n', '02', '\n', '\n', '7', '个', '超大', '城市', ':', '4', '大', '一线', '+', '成渝', '津', '\n', '\n', '超大', '城市', ',', '是', '我国', '城市', '规模', '层级', '的', '金字塔', '尖', '城市', '。', '\n', '\n', '目前', ',', '我国', '共有', '7', '个', '超大', '城市', ',', '除了', '北上', '广深', '四大', '一线', '城市', ',', '还有', '重庆', '、', '天津', '两大', '直辖市', ',', '以及', '成都', '。']
print(jieba.lcut(str_text, use_paddle=True))
['其一', ',', '中国', '的', '城市', ',', '包括', '直辖市', '、', '副', '省级', '市', '、', '普通', '地级市', '、', '县级市', ',', '但', '不', '包括', '县', '。', '\n', '\n', '正如', '《', '中国', '城市', '大', '趋势', '》', '一书', '所', '分析', '的', ',', '县', '与', '县级市', '虽然', '级别', '相同', ',', '但', '定位', '有', '巨大', '差别', '。', '县', '是', '以', '农业', '为', '基础', '的', '管理', '单元', ',', '县级市', '则', '以', '工商业', '为主', '。', '\n', '\n', '对于', '县', ',', '地级市', '进行', '直管', ';', '对于', '县级市', ',', '地级市', '则', '只是', '代管', '。', '\n', '\n', '名义', '之别', ',', '导致', '了', '县级市', '与其', '所在', '地级市', ',', '均', '被', '视为', '独立', '城市', ',', '从而', '单薄', '市级', '层面', '的', '人口', '规模', ',', '如', '昆山', '与', '苏州', ',', '晋江', '与', '泉州', ',', '义乌', '与', '金华', '。', '\n', '\n', '其二', ',', '衡量', '城市', '规模', ',', '看', '的', '是', '城区', '人口', ',', '而', '非', '全市', '人口', '。', '\n', '\n', '城区', '人口', ',', '顾名思义', ',', '不', '包括', '镇区', '及', '乡村人口', ',', '明显', '低于', '全市', '常住人口', '。', '城区', '人口', '占', '全市', '人口比例', '最高', '可达', '9', '成', '以上', ',', '最低', '甚至', '不到', '20%', '。', '\n', '\n', '凡是', '城镇化率', '不高', '的', '地区', ',', '或者', '下辖', '县乡', '过多', '的', '城市', ',', '即使', '全市', '人口', '迈过', '了', '千万', '大关', ',', '也', '未必', '能', '晋级', '为', '超大', '特大城市', '。', '\n', '\n', '02', '\n', '\n', '7', '个', '超大', '城市', ':', '4', '大', '一线', '+', '成渝', '津', '\n', '\n', '超大', '城市', ',', '是', '我国', '城市', '规模', '层级', '的', '金字塔', '尖', '城市', '。', '\n', '\n', '目前', ',', '我国', '共有', '7', '个', '超大', '城市', ',', '除了', '北上', '广深', '四大', '一线', '城市', ',', '还有', '重庆', '、', '天津', '两大', '直辖市', ',', '以及', '成都', '。']