中文分词jieba库的使用与实景应用(一)

server/2024/12/23 4:02:22/

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html

目录

一.定义:

精确模式(默认模式):

全模式:

搜索引擎模式:

paddle 模式(基于深度学习的分词模式):

二 自定义词典

三.文本解析

  调整词出现的频率

四. 关键词提取

A. 基于TF-IDF算法的关键词提取

B. 基于TextRank算法的关键词提取

C. 使用示例

五. 词性标注

六. 并行分词

七. Tokenize接口

八. 总结

九.下文


一.定义:

jieba 是一个非常流行的中文分词库,广泛用于自然语言处理(NLP)任务中。它提供了多种分词模式,能够高效地将中文文本切分为词语

jieba库支持四种分词模式:精确模式、全模式、搜索引擎模式、paddle模式,并且支持繁体分词,以及自定义词典。具体介绍:

精确模式,试图将句子最精确地切开,适合文本分析;

全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

算法

基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)

采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

安装:可以通过 pip 命令安装 jieba 库: pip install jieba

基本分词

    • 精确模式(默认):jieba.cut(sentence, cut_all=False)
    • 全模式:jieba.cut(sentence, cut_all=True)
    • 搜索引擎模式:jieba.cut_for_search(sentence)

精确模式(默认模式):

这是 jieba 的默认分词模式,它试图将句子最精确地切开,适合文本分析。


pythonimport jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("精确模式: " + "/ ".join(seg_list))
# 输出结果:我/ 来到/ 北京/ 清华大学

全模式

这个模式会把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。

pythonseg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list))
# 输出结果:我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

搜索引擎模式

这个模式在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

pythonseg_list = jieba.cut_for_search("我来到北京清华大学")
print("搜索引擎模式: " + "/ ".join(seg_list))
# 输出结果:我/ 来到/ 北京/ 清华大学/ 北京大学/ 清华大学

paddle 模式(基于深度学习的分词模式):

这个模式利用 PaddlePaddle 深度学习框架,进行更准确的分词和词性标注。使用前需要确保安装了 paddlepaddle。

pip install paddlepaddle

python复制import jieba
jieba.enable_paddle()  # 启动 paddle 模式
seg_list = jieba.cut("我来到北京清华大学", use_paddle=True)
print("Paddle 模式: " + "/ ".join(seg_list))
# 输出结果可能会更加准确,依赖于深度学习模型的效果

二 自定义词典

在jieba自定义字典方面,目前我所了解到的常见的应用环境是各网络平台对违禁词的查询搜索处理,以及网站也对用户个人信息的处理,对购物方面评价信息的处理等等。因此,我同样也使用了jupyter notebook尝试了自定义词典的使用,text文本文件及运行结果如下图所示:

A. 添加词语

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。

B. 载入自定义词典

如果有一个包含自定义词语的文件,可以使用jieba.load_userdict(file_path)方法加载该文件,并将其中的词语加入到词典中。


import jieba# 添加单个词语到词典中
jieba.add_word("自然语言处理")# 载入自定义词典文件
jieba.load_userdict("custom_dict.txt")sentence = "我爱自然语言处理"# 分词结果包含自定义词语
seg_list = jieba.cut(sentence)
print("/".join(seg_list))  # 输出: 我/爱/自然语言处理
 

三.文本解析

def getext():fname=input("请输入要打开的文件路径及名称,以txt结尾:")fo=open(fname)      #打开该文件,默认是文本文件,文本文件其实就是一个字符串txt=fo.read()       #<文件名>.read()  默认是读取文件全部内容txt=txt.lower()     #将文本所有字母小写for ch in '!"#$%()*+<_>/:;<>=?@[\]\^_{}|~':txt=txt.replace(ch,'')       #将文本中含有的所有上述字符都变为空格return txt
hamlettxt=getext()
words=hamlettxt.split()      #默认值,是将文本中单词按照空格分成一个一个的单词,并将结果保存成列表类型
counts={}                    #定义一个空字典类型,因为我们希望单词和该单词出现的次数作为一个键值对
for word in words:           #遍历words列表的每一个值counts[word]=counts.get(word,0)+1
items=list(counts.items())      #将该字典转化成一个列表,其中的键值对是以元组的形式存在
items.sort(key=lambda x:x[1],reverse=True)
for i in range(10):word,count=items[i]       #items[i] 是个元组,元组可以带括号,可以不带括号;赋值print("{:<10}{:>5}".format(word,count))

  调整词出现的频率

str = "你好呀,我叫李华!多多关照!"
jieba.suggest_freq(("李", "华"), True)
print(jieba.lcut(str))

四. 关键词提取

A. 基于TF-IDF算法的关键词提取

jieba库提供了基于TF-IDF算法的关键词提取方法jieba.extract_tags(sentence, topK=10),用于从文本中提取关键词。

参数:

sentence:要提取的文本

topK:返回多少个具有最高TF/IDF权重的关键字。默认值为 20

withWeight:是否返回关键字的TF/IDF权重。默认为假

allowPOS:过滤包含POS(词性)的单词。空无过滤,可以选择['ns', 'n', 'vn', 'v','nr']

B. 基于TextRank算法的关键词提取

jieba库还提供了基于TextRank算法的关键词提取方法jieba.textrank(sentence, topK=10),也可以用于从文本中提取关键词。

topK参数指定返回的关键词数量,默认为10。

C. 使用示例

import jiebasentence = "自然语言处理是人工智能领域的重要技术之一"# 基于TF-IDF算法的关键词提取
keywords = jieba.extract_tags(sentence, topK=5)
print(keywords)  # 输出: ['自然语言处理', '人工智能', '技术', '领域', '重要']# 基于TextRank算法的关键词提取
keywords = jieba.textrank(sentence, topK=5)
print(keywords)  # 输出: ['技术', '重要', '领域', '自然语言处理', '人工智能']

五. 词性标注

A. 词性标注集

jieba库支持对分词结果进行词性标注,使用的是jieba库内置的词性标注集。

B. 使用示例

import jieba
import jieba.posseg as pseg# 分词并进行词性标注
words = pseg.cut("自然语言处理很有趣") #jieba默认模式
jieba.enable_paddle() #启动paddle模式。 0.40版之后开始支持,早期版本不支持
words = pseg.cut("我爱北京天安门",use_paddle=True) #paddle模式
for word, flag in words:print(word, flag)
# 输出:
# 自然语言 l
# 处理 v
# 很 d
# 有趣 a

paddle模式词性标注对应表如下:

paddle模式词性和专名类别标签集合如下表,其中词性标签 24 个(小写字母),专名类别标签 4 个(大写字母)。

六. 并行分词

A. 并行分词的优势

jieba库支持并行分词,能够利用多核CPU提高分词速度。

并行分词使用的是基于python多进程的方式,需要在分词前调用jieba.enable_parallel()启用并行分词,之后可以正常使用分词功能。

B. 并行分词使用示例

import jiebajieba.enable_parallel(4)  # 启用并行分词,使用4个进程sentence = "自然语言处理很有趣"# 分词结果
seg_list = jieba.cut(sentence)
print("/".join(seg_list))
# 输出: 自然/语言/处理/很/有趣

jieba.disable_parallel() # 关闭并行分词

七. Tokenize接口

A. 默认模式

jieba库提供了Tokenize接口jieba.tokenize(sentence, mode='default'),用于获取每个词语的起始位置和词性。

默认模式下,返回结果包含词语、词语在文本中的起始位置和结束位置。

B. 搜索引擎模式

在Tokenize接口中,可以选择搜索引擎模式,通过mode='search'参数指定。

搜索引擎模式下,返回结果还包含分词的偏移量,适用于搜索引擎等应用场景。

C. 返回结果格式

Tokenize接口返回的结果是一个可迭代的生成器,每个生成器元素都是一个元组,包含词语、起始位置、结束位置和词性(可选)。

D. 使用示例

import jiebasentence = "自然语言处理很有趣"# 默认模式下的Tokenize接口
tokens = jieba.tokenize(sentence)
for tk in tokens:word = tk[0]start_index = tk[1]end_index = tk[2]print(word, start_index, end_index)
# 输出:
# 自然语言 0 4
# 处理 4 6
# 很 6 7
# 有趣 7 9# 搜索引擎模式下的Tokenize接口
tokens = jieba.tokenize(sentence, mode='search')
for tk in tokens:word = tk[0]start_index = tk[1]end_index = tk[2]print(word, start_index, end_index)
# 输出:
# 自然 0 2
# 语言 2 4
# 处理 4 6
# 很 6 7
# 有趣 7 9

八. 总结

本教程介绍了Python中jieba库的基本使用方法和常用功能,包括分词基础、自定义词典、关键词提取、词性标注、并行分词和Tokenize接口。通过学习和掌握这些功能,你可以在中文文本处理中灵活应用jieba库,实现有效的分词、关键词提取和词性标注等任务。

在使用jieba库时,你可以根据具体需求选择不同的分词模式,如精确模式、全模式和搜索引擎模式。还可以通过自定义词典添加特定词语,提高分词的准确性。关键词提取功能可以帮助你从文本中提取出重要的关键词,有助于文本理解和信息提取。词性标注功能可以标注每个词语的词性,对于一些需要深入分析的任务很有帮助。Tokenize接口可以提供词语的起始位置和词性信息,适用于一些特定的应用场景。并行分词功能可以充分利用多核CPU,提高分词速度。

九.下文

jieba数据分析


http://www.ppmy.cn/server/114259.html

相关文章

面试—Linux

目录 ps tar netstat 文件处理命令&#xff08;增删改&#xff09; 文件操作&#xff08;查看&#xff09; 权限管理 文件搜索 网络管理 压缩命令 Vim编辑器 ps ps命令用于显示当前系统的进程状态 包括一些进程ID&#xff0c;终端&#xff0c;运行时间等 常见参数 …

【限流器】golang令牌桶限流源码分析

1.令牌桶限流算法 算法思想&#xff1a;系统以一定速率生成令牌&#xff0c;存放于桶中&#xff0c;在达到容量的最大值后停止生成令牌。用户生成请求后从令牌桶中消费令牌才能执行。否则延迟执行或被限制。 使用场景&#xff1a;平滑流量控制&#xff1b;在一定程度上可以处…

从零开始搭建Prometheus与Grafana监控系统:实战演练

从零开始搭建 Prometheus 与 Grafana 监控系统&#xff1a;实战演练 监控系统是现代 IT 基础设施的重要组成部分&#xff0c;用于监控服务器、应用程序和服务的性能和可用性。Prometheus 和 Grafana 是目前广泛使用的开源监控和可视化工具。本篇文章将从零开始&#xff0c;手把…

云原生架构概念

云原生架构概念 云原生架构&#xff08;Cloud Native Architechtrue&#xff09;作为一种现代软件开发的革新力量&#xff0c;正在逐渐改变企业构建、部署和管理应用程序的方式。它的核心优势在于支持微服务架构&#xff0c;使得应用程序能够分解为独立、松耦合的服务&#xf…

Nginx的负载均衡

Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;广泛用于负载均衡。负载均衡的目的是将客户端请求分配到多个后端服务器&#xff0c;以提高应用的可用性和性能。下面详细解释 Nginx 的负载均衡特性&#xff0c;包括其工作原理、配置方法、负载均衡算法等。 工作原理 …

贝锐蒲公英远程视频监控方案:4G入网无需公网IP,跨品牌统一管理

在部署视频监控并实现集中监看时&#xff0c;常常会遇到各种挑战。比如&#xff1a;部分监控点位布线困难、无法接入有线宽带&#xff0c;或是没有固定公网IP&#xff0c;难以实现远程集中监看&#xff1b;已有网络质量差&#xff0c;传输延迟大、丢包率高&#xff0c;远程实时…

Anti-honeypot - 自动识别Web蜜罐Chrome插件,附下载链接

在我们最近的一次攻防演习中&#xff0c;我和同事们发现了一些关于蜜罐的有趣现象。很多情况下&#xff0c;红队的攻击手法虽然高超&#xff0c;但他们往往因为一个小细节而暴露了真实身份。比如&#xff0c;有些黑客在使用浏览器时&#xff0c;没有开启隐身模式&#xff0c;结…

【拥抱AI】浅谈Prompt的书写规范及要点

Prompt是什么&#xff1f; Prompt是一种技术&#xff0c;它通过自然语言处理来引导用户与机器之间的交互。在人工智能领域&#xff0c;Prompt通常用于生成文本&#xff0c;例如对话系统、机器翻译和文本摘要等应用。它也用于训练模型&#xff0c;以使其能够理解和生成人类语言…