jieba分词器
jieba 是一个常用的 Python 中文分词库,主要用于把连续的中文文本切分成词语。它简单易用,支持多种分词模式、自定义词典、词性标注和关键词提取。
jieba演示版本:0.42.1
三种分词模式
精确模式
精确模式:默认模式,适合文本分析,只保留最合理的切分结果。
py
context = "我来到北京清华大学上学"
result1 = jieba.cut(context, cut_all=False)
print(result1)
# 结果是迭代器:
# <generator object Tokenizer.cut at 0x00000260C61005C0>
print([x for x in result1]) # 效果同下
result2 =jieba.lcut(context, cut_all=False)
print(result2)
# ['我', '来到', '北京', '清华大学', '上学']
全模式
全模式:把所有可能成词的都切出来,适合快速召回,会有冗余。
py
context = "我来到北京清华大学上学"
result1 = jieba.lcut(context, cut_all=True)
print(result1)
# ['我', '来到', '北京', '清华', '清华大学', '华大', '大学', '学上', '上学']
搜索引擎模式
搜索引擎模式:在精确模式基础上,对长词再切分,适合搜索索引
py
context = "我来到北京清华大学上学"
result1 = jieba.lcut_for_search(context)
print(result1)
# ['我', '来到', '北京', '清华', '华大', '大学', '清华大学', '上学']
词典与自定义分词
jieba 的分词结果高度依赖词典。默认词典决定大部分切分,自定义词典用来补充新词、专有名词、领域术语,并调整词频来解决歧义。
1. jieba 词典基础
默认词典
jieba 自带一个默认词典 dict.txt,里面包含:
1.词语
2.词频:影响动态规划选择最大概率路径。
3.词性:供 jieba.posseg 词性标注使用。
词典如何影响分词
jieba 精确模式会构建 DAG,然后根据词频找最大概率路径。
如果某个词不在词典里,或者词频太低,就可能被切碎。
2. 用户自定义词典
词典文件格式
每行一个词,支持三种写法:
词语
词语 词频
词语 词频 词性
说明:
词频可省略,省略时使用自动计算值。
词性可省略。
文件编码建议使用 UTF-8。
词频不是越大越好,过高可能导致过度合并。
加载用户词典
也可以多次调用:加载多个词典
py
jieba.load_userdict("dict1.txt")
jieba.load_userdict("dict2.txt")
设置主词典
注意:这会替换默认词典,可能导致很多常用词丢失,一般不推荐。
py
jieba.set_dictionary("my_dict.txt")
3. 动态修改词典
参数:
word:词语
freq:词频,可选
tag:词性,可选
1. 添加词
除了加载文件,也可以在代码中动态增删词。
py
jieba.add_word("云计算", freq=100, tag="n")
2. 删除词
py
jieba.del_word('云计算')
3. 调整词频
用于调节词频,使某个词能或不能被切出来
1. suggest_freq 方法参数说明:
segment:这是你想要调整的目标。
如果想合并成一个词,就传入一个字符串,比如 "台中"。
如果想拆分一个词,就传入一个元组,把你想拆成的部分放进去,比如 ("中", "将")
tune这是一个布尔值,默认为 False。
当 tune=True 时,函数会实际修改词典中的词频,让调整立即生效。
如果为 False(默认),它只返回计算出的建议词频,但不会真正修改词典。
2. lcut 方法参数说明:
HMM:
True(默认):开启新词发现
False:关闭新词发现。分词将完全依赖词典。
py
jieba.suggest_freq('西方大道',tune=True)
jieba.suggest_freq(('大','学'),tune=True)
l = jieba.lcut('小明上大学了,小红去西方大道了', HMM=False)
print(l)
# ['小', '明', '上', '大', '学', '了', ',', '小', '红', '去', '西方大道', '了']