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))  # 全模式
View Code
    • 全模式:大学/大学生/学生/生涯/即将/结束/啦
1 import jieba
2 seg_list = jieba.cut("大学生涯即将结束啦", cut_all=False)
3 print("精准模式:"+"/".join(seg_list))  # 精准模式
View Code
    • 精准模式:大学/生涯/即将/结束/啦

②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))
View Code
    • 搜索引擎模式:大学, 生涯, 即将, 结束, 啦
  • 以列表的形式返回结果,极力推荐使用下面这两种

①jieba.lcut (str):str参数需要分词的字符串;该方法返回的是列表。

1 import jieba
2 seg_list = jieba.lcut("大学生涯即将结束啦") 
3 print(seg_list)
View Code
    • ['大学', '生涯', '即将', '结束', '啦']

②jieba.lcut_for_search(str):str参数需要分词的字符串;该方法返回的是列表。

1 import jieba
2 seg_list = jieba.lcut_for_search("大学生涯即将结束啦")  # 搜索引擎模式
3 print(seg_list)
View Code
    • ['大学', '生涯', '即将', '结束', '啦']
  • 提取关键词
    • 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)
View Code
    • ['埃菲尔铁塔', '喜欢', '法国']
  • 切分并返回该词语在文本对应的位置
    • jieba.tokenize(str) :str参数需要分词的字符串;以返回可迭代的generator类型。’
1 #返回对应的词语位置
2 import jieba
3 sentence = "我喜欢去法国的埃菲尔铁塔"
4 lo = jieba.tokenize(sentence)
5 for i in lo:
6     print(i)
View Code
    • ('我', 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)
View Code
    • ['里', '傻', '逼', '很帅']
1 import jieba
2 jieba.add_word("里傻逼")
3 seg_list = jieba.lcut_for_search("里傻逼很帅")  # 搜索引擎模式
4 print(seg_list)
View Code
    • ['里傻逼', '很帅']

②使用suggest_freq(segment, tune=True)可调节单个词语的词频,使其能(或不能)被分出来。

    • 注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

1 import jieba
2 print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
View Code
    • 如果/放到/post/中/将/出错/。
1 import jieba
2 jieba.suggest_freq(('', ''), True) #加了suggest函数后
3 print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
View Code
    •  如果/放到/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)
View Code
    •  ['李小福', '是', '创新', '办', '主任', '也', '是', '云', '计算', '方面', '的', '专家']
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)
View Code
    • ['李小福', '是', '创新', '创新办', '主任', '也', '是', '计算', '云计算', '方面', '的', '专家']

posted on 2019-07-22 00:08  LiErRui  阅读(1176)  评论(0)    收藏  举报

导航