jieba模块

jieba库介绍

Python的jieba库是一个中文分词工具,它可以将一段中文文本分割成一个一个的词语,方便后续的自然语言处理任务,如文本分类、情感分析等。

jieba库使用了基于前缀词典的分词方法,能够处理中文的各种复杂情况,如歧义词、新词等。它还提供了多种分词模式,如精确模式、全模式、搜索引擎模式等,以适应不同场景的需求。

此外,jieba库还支持用户自定义词典,使得分词结果更加准确。

安装jieba库

因为 jieba 是一个第三方库,所有需要我们在本地进行安装。

Windows 下使用命令安装

在联网状态下,在命令提示符下使用pip命令进行安装:

 pip install jieba

安装完成后会提示安装成功:

Python中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.cutjieba.cut_for_search 方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语。

或者直接使用 jieba.lcut 以及 jieba.lcut_for_search 返回 list。

  • jieba.cutjieba.lcut 可接受的参数如下:

    • 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)

    • cut_all:是否使用全模式,默认值为 False

    • HMM:用来控制是否使用 HMM 模型,默认值为 True

  • jieba.cut_for_searchjieba.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)是全模式语法

Copyright © all right reserved,powered by Gitbook该文件修订时间: 2023-10-27 17:35:59