jieba中文分词


jieba包的使用方法

jieba中文分词的用法

特点


  • 支持三种分词模式:
    • 精确模式:试图将句子最精确的切开,适合文本分析
    • 全模式:把句子中所有可以成词的词语都扫描出来,但不能解决歧义
    • 搜索引擎模式:将精确模式的基础上,对长词语再次切分,适用于搜索引擎分词
  • 支持繁体分词

  • 支持自定义词典

  • MIT授权协议

主要功能


1.分词

  • jieba.cut 方法接受三个参数:字符串,cut_all参数用来控制是否采用全模式,HMM参数用来控制是否使用HMM模型
  • jieba.cut_for_search 方法接受两个参数:字符串,是否使用HMM模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  • 待分词的字符串可以是unicode或utf-8字符串,GBK字符串。注意:不建议直接输入GBK字符串,可能无法预料的错误解码成utf-8
  • jieba.cut 以及 jieba.cut_for_search返回的结构的可迭代的generator,可以使用for循环来获取分词后的每一个词语(unicode),或者直接用jieba.lcut以及jieba.lcut_for_search直接返回list
  • jieba.Tokenizer(dictionary=DEFAULT_DICT)新建自定义分词器。jieba.dt 为默认分词器,所有全局分词相关的函数都是该分词器的映射
import jieba

seg_list = jieba.cut('我来到上海复旦大学',cut_all=True)   #全模式
print('Full Mode: ' + '/'.join(seg_list))
Full Mode: 我/来到/上海/上海复旦大学/复旦/复旦大学/大学
seg_list = jieba.cut('我来到上海复旦大学',cut_all=False) #精确模式
print('Default Mode: ' + '/'.join(seg_list))
Default Mode: 我/来到/上海复旦大学
seg_list = jieba.cut('我来到江苏省宿迁市')  #默认是精确模式
print(','.join(seg_list))
我,来到,江苏省,宿迁市
seg_list = jieba.cut_for_search('小明硕士毕业于中国科学院计算所,后在日本东京大学深造')  #搜索引擎模式
print(','.join(seg_list))
小明,硕士,毕业,于,中国,科学,学院,科学院,中国科学院,计算,计算所,,,后,在,日本,东京,大学,日本东京大学,深造

2.添加自定义词典


载入词典

  • 开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词
  • 用法:jieba.load_userdict(file_name) #file_name为文件类对象或自定义词典的路径
  • 词典格式和dict.txt一样,一个词占一行,每一行分三个部分:词语,词频(可省略),词性(可省略),用空格隔开,顺序不可颠倒
  • 词频省略时使用自动计算的能保证分开的词频
jieba.load_userdict('userdict.txt')
seg_list = jieba.cut('李小福是创新办主任也是云计算方面的专家')
print('/'.join(seg_list))
李小福/是/创新办/主任/也/是/云计算/方面/的/专家
import jieba
seg_list = jieba.cut('李小福是创新办主任也是云计算方面的专家')
print('/'.join(seg_list))
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\LOVELY~1\AppData\Local\Temp\jieba.cache
Loading model cost 0.905 seconds.
Prefix dict has been built succesfully.


李小福/是/创新/办/主任/也/是/云/计算/方面/的/专家

调整词典 (通过用户自定义词典来增强歧义纠错能力)

  • 使用add_word(word, freq=None, tag=None)和del_word(word)来动态修改词典
  • 使用suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)分出来
  • 注意:自动计算的词频在使用HMM新词发现功能时可能无效
print('/'.join(jieba.cut('如果放到post中将会出错',HMM=False)))
如果/放到/post/中将/会/出错
jieba.suggest_freq(('中','将'), True)
494
print('/'.join(jieba.cut('如果放到post中将会出错',HMM=False)))
如果/放到/post/中/将/会/出错
print('/'.join(jieba.cut('「台中」正确应该不会被切开',HMM=False)))
「/台/中/」/正确/应该/不会/被/切开
jieba.suggest_freq(('台中'),True)
70
print('/'.join(jieba.cut('「台中」正确应该不会被切开',HMM=False)))
「/台中/」/正确/应该/不会/被/切开

3.关键词提取


基于TF-IDF算法的关键词提取

import jieba.analyse

  • jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

    • sentence为待提取的文本
    • topK为返回几个TF/IDF权重最大的关键词,默认20
    • withWeight为是否一并返回权重,默认False
    • allowPOS仅包括指定词性的词,默认为空
  • jieba.analyse.TFIDF(idfpath=None) 新建TFIDF实例,idf_path为IDF频率文件

关键词提取使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径

关键词提取使用停止词文本语料库也可以切换到自定义语料库

  • 用法:jieba.analse.set_stop_words(file_name)

基于TextRank算法的关键词提取

  • jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’) 默认配置
  • jieba.analyse.TextRank() 新建自定义TextRank实例

4.词性标注


  • jieba.posseg.POSTTokenizer(tokenizer=None)新建自定义分词器,tokenizer参数可指定内部使用的jieba.Tokenizer分词器。jieba.posseg.dt为默认词性标注分词器
import jieba.posseg as pseg
words = pseg.cut('我爱北京天安门')
for word, flag in words:
    print('%s %s' % (word,flag))
我 r
爱 v
北京 ns
天安门 ns

5.并行分词


  • 原理:将目标文本按行分割后,把各行文本分配到多个python进程并行分词,然后归并结果,从而提高速度
  • 基于python自带的multiprocessing 模块,目前暂不支持windows
  • 用法:
    • jieba.enable_parallel(4) 开启并行模式
    • jieba.disable_parallel() 关闭并行模式

6.Tokenize: 返回词语在原文的起止位置


  • 注意,输入参数只接受unicode
#默认模式
result = jieba.tokenize('永和服装饰品有限公司')
for tk in result:
    print('word %s\t\t start: %d \t\t end: %d' %(tk[0], tk[1], tk[2]))
word 永和      start: 0        end: 2
word 服装      start: 2        end: 4
word 饰品      start: 4        end: 6
word 有限公司        start: 6        end: 10
#搜索模式
result = jieba.tokenize('永和服装饰品有限公司',mode='search')
for tk in result:
    print('word %s\t\t start: %d \t\t end: %d' %(tk[0], tk[1], tk[2]))
word 永和      start: 0        end: 2
word 服装      start: 2        end: 4
word 饰品      start: 4        end: 6
word 有限      start: 6        end: 8
word 公司      start: 8        end: 10
word 有限公司        start: 6        end: 10

7.延迟加载机制


jieba采用延迟加载,import jieba和jieba.Tokenizer()不会立即触发词典的加载,一旦有必要才开始加载词典。不过也可以手动初始化

import jieba
jieba.initialize()

有了延迟加载机制后可以改变主词典的路径:
jieba.set_dictionary(file_name)


文章作者: lovelyfrog
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lovelyfrog !
 上一篇
pillow入门 pillow入门
pillow入门 import numpy import PIL.Image as Image import PIL.ImageFont as ImageFont import PIL.ImageDraw as ImageDraw imp
2017-08-24
下一篇 
python编码转换与中文处理 python编码转换与中文处理
关于字符的处理 python文件的编码python 脚本文件默认都是采用ANSCII编码的,当文件中有非ANSCII编码范围内的字符时,需要“编码指示”来修正module中的定义,比如# --coding=utf-8--或者#codin
2017-08-23
  目录