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

2024-09-09 18:04

本文主要是介绍中文分词jieba库的使用与实景应用(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识星球: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数据分析

这篇关于中文分词jieba库的使用与实景应用(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1151886

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W