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.analyse.set_idf_path(file_name) #file_name为自定义语料库的路径
- 自定义语料库示例:https://github.com/fxsjy/jieba/blob/master/extra_dict/stop_words.txt
关键词提取使用停止词文本语料库也可以切换到自定义语料库
- 用法: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)