jieba库使用
1、jieba库简单介绍
- jieba 顾名思义对应中文中的“结巴”,在人们说话时偶尔也会产生结巴的现象,就是好好的一句话却不能流利通顺的讲完,但根据人们的固有思维影响,就算说话结巴也能吐词精准,因此jieba库分词也许就是这样来的吧!jieba库对于人们做分词是一种很好的工具,它可以帮助人们分析一个文本中出现词语的次数,这对于频繁出现的次数可以适当用来分析某种现象。如果适当的引入到云图中,那将是很不错的视觉可视化。所以会受到不少人的亲睐。
2、jieba库分词原理
- jieba分词原理比较简单,根据固有的词库进行关联度分析,出现频率大的词语进行有效切分,因而产生的词语符合我们大众的组词习惯。但是对于新产生的网络词语可能不能很好切分出来,我们需要自己往词库中进行适当的添加,类似一本字典。
3、jieba库特点
-
支持三种分词模式:
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
-
支持繁体分词
-
支持自定义词典
-
MIT 授权协议
4、jieba库功能
- 以可迭代的 generator类型返回结果,可以使用 for 循环来获得分词后得到的每一个词语(unicode)
①jieba.cut(str,cut_all=False,HMM=False):str参数需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型。返回的结果是可迭代。
1 import jieba 2 seg_list = jieba.cut("大学生涯即将结束啦", cut_all=True) 3 print("全模式:"+"/".join(seg_list)) # 全模式
-
- 全模式:大学/大学生/学生/生涯/即将/结束/啦
1 import jieba 2 seg_list = jieba.cut("大学生涯即将结束啦", cut_all=False) 3 print("精准模式:"+"/".join(seg_list)) # 精准模式
-
- 精准模式:大学/生涯/即将/结束/啦
②jieba.cut_for_search(str,HMM=False): str参数需要分词的字符串;HMM参数是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。
1 import jieba 2 seg_list = jieba.cut_for_search("大学生涯即将结束啦") # 搜索引擎模式 3 print("搜索引擎模式:"+", ".join(seg_list))
-
- 搜索引擎模式:大学, 生涯, 即将, 结束, 啦
- 以列表的形式返回结果,极力推荐使用下面这两种
①jieba.lcut (str):str参数需要分词的字符串;该方法返回的是列表。
1 import jieba 2 seg_list = jieba.lcut("大学生涯即将结束啦") 3 print(seg_list)
-
- ['大学', '生涯', '即将', '结束', '啦']
②jieba.lcut_for_search(str):str参数需要分词的字符串;该方法返回的是列表。
1 import jieba 2 seg_list = jieba.lcut_for_search("大学生涯即将结束啦") # 搜索引擎模式 3 print(seg_list)
- ['大学', '生涯', '即将', '结束', '啦']
- 提取关键词
- jieba.analyse.extract_tags(str,num):str参数需要分词的字符串,num返回关键词的个数;该方法返回的是列表。
1 #提取关键词,排除非关键词高词频的影响 2 import jieba.analyse 3 sentence = "我喜欢去法国的埃菲尔铁塔" 4 tag = jieba.analyse.extract_tags(sentence,5) 5 print(tag)
-
- ['埃菲尔铁塔', '喜欢', '法国']
- 切分并返回该词语在文本对应的位置
- jieba.tokenize(str) :str参数需要分词的字符串;以返回可迭代的generator类型。’
1 #返回对应的词语位置 2 import jieba 3 sentence = "我喜欢去法国的埃菲尔铁塔" 4 lo = jieba.tokenize(sentence) 5 for i in lo: 6 print(i)
-
- ('我', 0, 1)('喜欢', 1, 3)('去', 3, 4)('法国', 4, 6)('的', 6, 7)('埃菲尔铁塔', 7, 12)
5、jieba库调整词典
①使用 add_word(word, freq=None, tag=None):freq参数设置词频大小和 del_word(word)可在程序中动态修改词典。
1 import jieba 2 seg_list = jieba.lcut_for_search("里傻逼很帅") # 搜索引擎模式 3 print(seg_list)
-
- ['里', '傻', '逼', '很帅']
1 import jieba 2 jieba.add_word("里傻逼") 3 seg_list = jieba.lcut_for_search("里傻逼很帅") # 搜索引擎模式 4 print(seg_list)
-
- ['里傻逼', '很帅']
②使用suggest_freq(segment, tune=True)可调节单个词语的词频,使其能(或不能)被分出来。
-
-
注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。
-
1 import jieba 2 print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
- 如果/放到/post/中/将/出错/。
1 import jieba 2 jieba.suggest_freq(('中', '将'), True) #加了suggest函数后 3 print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
-
- 如果/放到/post/中将/出错/。
6、jieba库载入词典
-
- 开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率
- 用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
- 词典格式和
dict.txt一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。 词性常用型有a:形容词 c:连词 d:副词 e:叹词 f:方位词 i:成语 m:数次 n:名词 nr:人名 ns:地名 nt:机构团体 nz:其他专有名词 v:动词 r代词 t:时间 u:助词 vn:名动词 w:标点符号 un:未知词语等 - 词频省略时使用自动计算的能保证分出该词的词频
1 import jieba 2 seg_list = jieba.lcut_for_search("李小福是创新办主任也是云计算方面的专家") # 搜索引擎模式 3 print(seg_list)
- ['李小福', '是', '创新', '办', '主任', '也', '是', '云', '计算', '方面', '的', '专家']
1 file_name="dict_me.txt" #加入自定的词典 云计算 5 李小福 2 nr 创新办 3 i 2 jieba.load_userdict(file_name) 3 seg_list = jieba.lcut_for_search("李小福是创新办主任也是云计算方面的专家") # 搜索引擎模式 4 print(seg_list)
-
- ['李小福', '是', '创新', '创新办', '主任', '也', '是', '计算', '云计算', '方面', '的', '专家']
浙公网安备 33010602011771号