- 支持三种分词模式:
- 精确模式:将句子最精确地切开,适合文本分析
- 全模式:将句子中所有的可以成词的词语都扫描出来,速度很快,但是不能解决歧义
- 搜索引擎模式:在精确的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。
- 支持繁体分词
- 支持自定义词典
* * * 分词 jieba.cut:接受三个输参数:需要分词的字符串;cut_all参数来控制是否采用全模式(默认精确模式);HMM 参数用来控制是否使用 HMM 模型。 jieba.cut_for_search:接受两个参数:需要分词的字符串;使用使用 HMM 模型,该方法适合用于搜索引擎的构建倒排索引的分词,粒度比较细。 注意: 待分词的字符串可以是 unicode 、 UTF8 、GBK字符串 。 jieba.cut 和 jieba.cut_for_search 返回的结构都是一个可迭代的 generator ,用for循环来获取分词后的词语(unicode)。 jieba.lcut 和 jieba.lcut_for_search 直接返回list。
import jieba.analyse text = '机器学习,需要一定的数学基础,需要掌握的数学基础知识特别多,如果从头到尾开始学,估计大部分人来不及,我建议先学习最基础的数学知识' # 基于TF-IDF算法进行关键词抽取 tfidf = jieba.analyse.extract_tags(text, topK=5, # 权重最大的topK个关键词 withWeight=False) # 返回每个关键字的权重值 # 基于TextRank算法进行关键词抽取 textrank = jieba.analyse.textrank(text, topK=5, # 权重最大的topK个关键词 withWeight=False) # 返回每个关键字的权重值 import pprint # pprint 模块提供了打印出任何Python数据结构的类和方法 pprint.pprint(tfidf) pprint.pprint(textrank)
* * * * import jieba # jieba.enable_paddle() # 0.4版本以后支持paddle模式 需要安装paddlepaddle strings = ['我来自极客大学', 'Python进阶训练营真好玩'] for string in strings: result = jieba.cut(string, cut_all=False) print('Default Mode: ' + '/'.join(list(result))) for string in strings: result = jieba.cut(string, cut_all=True) # 全模式 print('Full Mode: ' + '/'.join(list(result))) # for string in strings: result = jieba.cut(string, use_paddle=True) # paddle模式 print('Paddle Mode: ' + '/'.join(list(result))) print('============') result = jieba.cut('钟南山院士接受采访新冠不会二次暴发') # 默认是精确模式 print('/'.join(list(result))) # "新冠" 没有在词典中,但是被Viterbi算法识别出来了 # print('==========') result = jieba.cut_for_search('小明硕士毕业于中国科学院计算所,后在日本京都大学深造') # 搜索引擎模式 print('Search Mode: ' + '/'.join(list(result)))
import jieba import jieba.analyse text = '机器学习,需要一定的数学基础,需要掌握的数学基础知识特别多,如果从头到尾开始学,估计大部分人来不及,我建议先学习最基础的数学知识' stop_words=r'day0402/extra_dict/stop_words.txt' # stop_words 的文件格式是文本文件,每行一个词语 jieba.analyse.set_stop_words(stop_words) textrank = jieba.analyse.textrank(text, topK=5, withWeight=False) import pprint # pprint 模块提供了打印出任何Python数据结构的类和方法 pprint.pprint(textrank)
import jieba string = '极客大学Python进阶训练营真好玩' user_dict=r'day0402/extra_dict/user_dict.txt' # 自定义词典 jieba.load_userdict(user_dict) result = jieba.cut(string, cut_all=False) print('自定义: ' + '/'.join(list(result))) print('=' * 40 ) # 动态添加词典 jieba.add_word('极客大学') # 动态删除词典 jieba.del_word('自定义词') result = jieba.cut(string, cut_all=False) print('动态添加: ' + '/'.join(list(result))) print('=' * 40 ) string2 = '我们中出了一个叛徒' result = jieba.cut(string2, cut_all=False) print('错误分词: ' + '/'.join(list(result))) print('=' * 40 ) # 关闭自动计算词频 result = jieba.cut(string2, HMM=False) print('关闭词频: ' + '/'.join(list(result))) print('=' * 40 ) # 调整分词,合并 jieba.suggest_freq('中出', True) result = jieba.cut(string2, HMM=False) print('分词合并: ' + '/'.join(list(result))) print('=' * 40 ) # 调整词频,被分出来 string3 = '如果放到Post中将出错' jieba.suggest_freq(('中','将'), True) result = jieba.cut(string3, HMM=False) print('分开分词: ' + '/'.join(list(result)))
jieba并发
import jieba jieba.enable_parallel(4)
添加自定义词典
载入词典
指定自己自定义的词典,来补充jieba词库里没有的词。
用法:jieba.load_userdict(file_name) file_name 文件对象或路径
词典格式,一个词占一行;一行分为三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不能颠倒。file_name 若为路径或二进制打开,文件必须为UTF-8编码。
# userdict.text文件 云计算 5 李小福 2 nr
import jieba jieba.load_userdict("userdict.txt") # 加载字典 jieba.add_word('八一双鹿') # 加载单词 demo = '李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿' words = jieba.cut(demo) print('/'.join(words))
1.使用add_word 和 del_word 可以动态修改词典。
基于 TF-IDF 算法的关键词抽取 jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) sentence:待提取的文本 topK:为返回几个TF-IDF权重的关键词 withWeight:是否一并返回关键词权重 allowPOS:仅包括指定词性的词 jieba.analyse.TFIDF(idf_path=None) 新建TF-IDF实例,为IDF频率文件
import time import jieba jieba.enable_parallel(1) # 创建1个线程 content = open('./1.txt',"rb").read() t1 = time.time() words = "/ ".join(jieba.cut(content)) t2 = time.time() log_f = open("1.log","wb") log_f.write(words.encode('utf-8')) print('speed %s bytes/second' % (len(content)/t2-t1))
词语在原文的位置
只接受unicode
默认模式
result = jieba.tokenize(u'永和服装饰品有限公司') for tk in result: print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
搜索模式
result = jieba.tokenize(u'永和服装饰品有限公司', mode='search') for tk in result: print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
延迟加载
jieba 加载采用延迟加载,import jieba 和 jieba.Tokenizer() 不会立即触发词典的加载,一旦有必要才开始加载词典构建前缀字典。如果你想手工初始 jieba,也可以手动初始化。
import jieba jieba.initialize() # 手动初始化(可选)
命令分词
python -m jieba news.txt > cut_result.txt
# 词性表 # 1. 名词 (1个一类,7个二类,5个三类) # 名词分为以下子类: # n 名词 # nr 人名 # nr1 汉语姓氏 # nr2 汉语名字 # nrj 日语人名 # nrf 音译人名 # ns 地名 # nsf 音译地名 # nt 机构团体名 # nz 其它专名 # nl 名词性惯用语 # ng 名词性语素 # 2. 时间词(1个一类,1个二类) # t 时间词 # tg 时间词性语素 # 3. 处所词(1个一类) # s 处所词 # 4. 方位词(1个一类) # f 方位词 # 5. 动词(1个一类,9个二类) # v 动词 # vd 副动词 # vn 名动词 # vshi 动词“是” # vyou 动词“有” # vf 趋向动词 # vx 形式动词 # vi 不及物动词(内动词) # vl 动词性惯用语 # vg 动词性语素 # 6. 形容词(1个一类,4个二类) # a 形容词 # ad 副形词 # an 名形词 # ag 形容词性语素 # al 形容词性惯用语 # 7. 区别词(1个一类,2个二类) # b 区别词 # bl 区别词性惯用语 # 8. 状态词(1个一类) # z 状态词 # 9. 代词(1个一类,4个二类,6个三类) # r 代词 # rr 人称代词 # rz 指示代词 # rzt 时间指示代词 # rzs 处所指示代词 # rzv 谓词性指示代词 # ry 疑问代词 # ryt 时间疑问代词 # rys 处所疑问代词 # ryv 谓词性疑问代词 # rg 代词性语素 # 10. 数词(1个一类,1个二类) # m 数词 # mq 数量词 # 11. 量词(1个一类,2个二类) # q 量词 # qv 动量词 # qt 时量词 # 12. 副词(1个一类) # d 副词 # 13. 介词(1个一类,2个二类) # p 介词 # pba 介词“把” # pbei 介词“被” # 14. 连词(1个一类,1个二类) # c 连词 # cc 并列连词 # 15. 助词(1个一类,15个二类) # u 助词 # uzhe 着 # ule 了 喽 # uguo 过 # ude1 的 底 # ude2 地 # ude3 得 # usuo 所 # udeng 等 等等 云云 # uyy 一样 一般 似的 般 # udh 的话 # uls 来讲 来说 而言 说来 # uzhi 之 # ulian 连 (“连小学生都会”) # 16. 叹词(1个一类) # e 叹词 # 17. 语气词(1个一类) # y 语气词(delete yg) # 18. 拟声词(1个一类) # o 拟声词 # 19. 前缀(1个一类) # h 前缀 # 20. 后缀(1个一类) # k 后缀 # 21. 字符串(1个一类,2个二类) # x 字符串 # xx 非语素字 # xu 网址URL # 22. 标点符号(1个一类,16个二类) # w 标点符号 # wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { < # wky 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { > # wyz 左引号,全角:“ ‘ 『 # wyy 右引号,全角:” ’ 』 # wj 句号,全角:。 # ww 问号,全角:? 半角:? # wt 叹号,全角:! 半角:! # wd 逗号,全角:, 半角:, # wf 分号,全角:; 半角: ; # wn 顿号,全角:、 # wm 冒号,全角:: 半角: : # ws 省略号,全角:…… … # wp 破折号,全角:—— -- ——- 半角:--- ---- # wb 百分号千分号,全角:% ‰ 半角:% # wh 单位符号,全角:¥ $ £ ° ℃ 半角:$