Python(jieba模块)

  • 支持三种分词模式:
    • 精确模式:将句子最精确地切开,适合文本分析
    • 全模式:将句子中所有的可以成词的词语都扫描出来,速度很快,但是不能解决歧义
    • 搜索引擎模式:在精确的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词
  • 支持繁体分词
  • 支持自定义词典
*
*
*
分词
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 单位符号,全角:¥ $ £ ° ℃ 半角:$