jieba模块
jieba库介绍
Python的jieba库是一个中文分词工具,它可以将一段中文文本分割成一个一个的词语,方便后续的自然语言处理任务,如文本分类、情感分析等。
jieba库使用了基于前缀词典的分词方法,能够处理中文的各种复杂情况,如歧义词、新词等。它还提供了多种分词模式,如精确模式、全模式、搜索引擎模式等,以适应不同场景的需求。
此外,jieba库还支持用户自定义词典,使得分词结果更加准确。
安装jieba库
因为 jieba
是一个第三方库,所有需要我们在本地进行安装。
Windows 下使用命令安装:
在联网状态下,在命令提示符下使用pip命令进行安装:
pip install jieba
安装完成后会提示安装成功:
安装成功后可以在命令提示符下使用如下pip命令查看jieba版本:
pip show jieba
C:\Users\czj>pip show jieba Name: jieba Version: 0.42.1 Summary: Chinese Words Segmentation Utilities Home-page: https://github.com/fxsjy/jieba Author: Sun, Junyi Author-email: ccnusjy@gmail.com License: MIT Location: d:\kfrj\python\python37\lib\site-packages Requires: Required-by:
jieba库的用法
jieba库分词的三种模式:
- 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析
- 全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据
- 搜索引擎模式:在精确模式的基础上,对长词再次进行切分
使用jieba模块必须先导入:
import jieba
可使用 jieba.cut
和 jieba.cut_for_search
方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语。
或者直接使用 jieba.lcut
以及 jieba.lcut_for_search
返回 list。
jieba.cut
和jieba.lcut
可接受的参数如下:需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
cut_all:是否使用全模式,默认值为
False
HMM:用来控制是否使用 HMM 模型,默认值为
True
jieba.cut_for_search
和jieba.lcut_for_search
接受 2 个参数:需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
HMM:用来控制是否使用 HMM 模型,默认值为
True
需要注意的是,尽量不要使用 GBK 字符串,可能无法预料地错误解码成 UTF-8。
jieba库的基本使用
精确模式
把词库精确区分开,不存在冗余词条,适合做文本分析
cut()方法:返回一个可迭代的数据类型
import jieba word = '中华人民共和国是伟大的国家' seg_list=jieba.cut(word) print(list(seg_list)) print(type(seg_list))
输出结果如下:
Building prefix dict from the default dictionary ... Loading model from cache C:\Users\czj\AppData\Local\Temp\jieba.cache Loading model cost 1.375 seconds. Prefix dict has been built successfully. ['中华人民共和国', '是', '伟大', '的', '国家'] <class 'generator'>
lcut()方法:返回一个列表类型,建议使用
import jieba word = '中华人民共和国是伟大的国家' seg_list=jieba.lcut(word) print(seg_list) print(type(seg_list))
输出结果如下:
Building prefix dict from the default dictionary ... Loading model from cache C:\Users\czj\AppData\Local\Temp\jieba.cache Loading model cost 1.297 seconds. Prefix dict has been built successfully. ['中华人民共和国', '是', '伟大', '的', '国家'] <class 'list'>
全模式
将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据
cut()方法:返回一个可迭代的数据类型
import jieba word = '中华人民共和国是伟大的国家' seg_list=jieba.cut(word,cut_all=True) print(list(seg_list)) print(type(seg_list))
输出结果如下:
Building prefix dict from the default dictionary ... Loading model from cache C:\Users\czj\AppData\Local\Temp\jieba.cache Loading model cost 1.172 seconds. Prefix dict has been built successfully. ['中华', '中华人民', '中华人民共和国', '华人', '人民', '人民共和国', '共和', '共和国', '国是', '伟大', '的', '国家'] <class 'generator'>
lcut()方法:返回一个列表类型,建议使用
import jieba word = '中华人民共和国是伟大的国家' seg_list=jieba.lcut(word,cut_all=True) print(seg_list) print(type(seg_list))
输出结果如下:
Building prefix dict from the default dictionary ... Loading model from cache C:\Users\czj\AppData\Local\Temp\jieba.cache Loading model cost 1.297 seconds. Prefix dict has been built successfully. ['中华', '中华人民', '中华人民共和国', '华人', '人民', '人民共和国', '共和', '共和国', '国是', '伟大', '的', '国家'] <class 'list'>
搜索引擎模式
在精确模式的基础上,对长词再次进行切分
cut_for_search()方法:返回一个可迭代的数据类型
import jieba word = '中华人民共和国是伟大的国家' seg_list=jieba.cut_for_search(word) print(list(seg_list)) print(type(seg_list))
输出结果如下:
Building prefix dict from the default dictionary ... Loading model from cache C:\Users\czj\AppData\Local\Temp\jieba.cache Loading model cost 1.281 seconds. Prefix dict has been built successfully. ['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的', '国家'] <class 'generator'>
lcut_for_search()方法:返回一个列表类型,建议使用
import jieba word = '中华人民共和国是伟大的国家' seg_list=jieba.lcut_for_search(word) print(seg_list) print(type(seg_list))
输出结果如下:
Building prefix dict from the default dictionary ... Loading model from cache C:\Users\czj\AppData\Local\Temp\jieba.cache Loading model cost 1.203 seconds. Prefix dict has been built successfully. ['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的', '国家'] <class 'list'>
增加新词
添加新的词语到词典是一种很常用的方法。jieba 分词有一个功能可以让用户添加自己的词汇到词典中,这样分词器在分词时就可以识别这些新的词汇。这在你需要处理具有专业术语的文档时特别有用。
add_word()
添加新词的语法如下:
jieba.add_word('新词')
运行如下代码:
import jieba
word = 'python是蟒蛇语言'
seg_list=jieba.lcut(word)
print(seg_list)
运行结果如下:
['python', '是', '蟒蛇', '语言']
如果我们想让蟒蛇语言
成为一个新词的话,可以修改代码如下:
import jieba
word = 'python是蟒蛇语言'
jieba.add_word("蟒蛇语言") #添加新的词语到词典
seg_list=jieba.lcut(word)
print(seg_list)
运行结果如下:
['python', '是', '蟒蛇语言']
说明:可以del_word()方法删除新词,格式如下:
jieba.del_word(word, freq=None, tag=None)
suggest_freq()
调节单个词语的词频,使其能(不能)被分出来,语法如下:
jieba.suggest_freq(segment, tune=True)
实例:
import jieba
str ="大家好,我叫龙云!请多多关照!"
jieba.suggest_freq(("龙云"),True)
print(jieba.lcut(str))
运行结果如下:
['大家', '好', ',', '我', '叫', '龙云', '!', '请', '多多关照', '!']
load_userdict()
开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率
语法:
jieba.load_userdict(file_name)# file_name 为文件类对象或自定义词典的路径
词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
文件如下:
创新办 3 i
云计算 5
凱特琳 nz
台中
jieba库综合应用
统计八荣八耻中出现的词汇,代码如下:
import jieba
word='八荣八耻的主要内容是:以热爱祖国为荣、以危害祖国为耻,以服务人民为荣、以背离人民为耻,以崇尚科学为荣、以愚昧无知为耻,以辛勤劳动为荣、以好逸恶劳为耻,以团结互助为荣、以损人利己为耻,以诚实守信为荣、以见利忘义为耻,以遵纪守法为荣、以违法乱纪为耻,以艰苦奋斗为荣、以骄奢淫逸为耻'
seg_list=jieba.lcut(word)
seg_set=set(seg_list)
for i in seg_set:
s=seg_list.count(i)
print(i,"...",s)
输出如下:
八荣八耻 ... 1
背离 ... 1
祖国 ... 1
违法乱纪 ... 1
危害 ... 1
损人利己 ... 1
遵纪守法 ... 1
团结互助 ... 1
热爱祖国 ... 1
辛勤劳动 ... 1
见利忘义 ... 1
、 ... 8
为耻 ... 8
的 ... 1
科学 ... 1
崇尚 ... 1
: ... 1
服务 ... 1
主要 ... 1
愚昧无知 ... 1
艰苦奋斗 ... 1
人民 ... 2
好逸恶劳 ... 1
, ... 7
是 ... 1
骄奢淫逸 ... 1
为荣 ... 8
守信 ... 1
内容 ... 1
以 ... 16
诚实 ... 1
模拟考题
考题1 单选题
Python中jieba的功能描述,正确的是?( )
A. 分词
B. 数据可视化
C. 计算
D. 画图
答案:A
解析:Python的jieba库是一个中文分词工具,它可以将一段中文文本分割成一个一个的词语
考题2 单选题
下面代码运行后的结果是?( )
import jieba
str ="大家好,我叫龙云!请多多关照!"
jieba.suggest_freq(("龙云"),True)
print(jieba.lcut(str))
A. '大'',''家', '好', ',', '我', '叫', '龙'',''云', '!', '请', '多多','关照', '!'
B. ['大家', '好', ',', '我', '叫', '龙'',''云', '!', '请', '多多关照', '!']
C. ['大家', '好', ',', '我', '叫', '龙云', '!', '请', '多多关照', '!']
D. ('大家', '好', ',', '我', '叫', '龙云', '!', '请', '多多关照', '!')
答案:C
解析:python中的jieba库应用。 有些句子中出现了一些词语,但是被分开为两个单独的字,虽然这样可以调整词库,只需要重新加载自定义的词库即可,除此之外我们还可以用调整词频来解决这个问题,本题把“龙云”这个姓名强制为词语而不是分割为两个单独的字。 jieba.suggest_freq(("龙云"),True)是全模式语法