Jieba分词模式详解、词库的添加与删除、自定义词库失败的处理

简介: Jieba(结巴)是一个中文分词第三方库,它可以帮助我们将一段中文文本分成一个个独立的词语。Jieba具有以下特点:简单易用:Jieba提供了简洁的API接口,易于使用和扩展。可以快速地实现中文分词功能。高效准确:Jieba采用了基于前缀词典和动态规划算法的分词方法,能够高效准确地处理各种中文文本。支持多种分词模式:Jieba提供了三种分词模式:精确模式、全模式和搜索引擎模式,可以根据不同的应用场景选择合适的模式。

Jieba(结巴)是一个中文分词第三方库,它可以帮助我们将一段中文文本分成一个个独立的词语。Jieba具有以下特点:

简单易用:Jieba提供了简洁的API接口,易于使用和扩展。可以快速地实现中文分词功能。

高效准确:Jieba采用了基于前缀词典和动态规划算法的分词方法,能够高效准确地处理各种中文文本。

支持多种分词模式:Jieba提供了三种分词模式:精确模式、全模式和搜索引擎模式,可以根据不同的应用场景选择合适的模式。

支持用户自定义词典:Jieba允许用户自定义词典,可以根据实际需要添加新的词语或调整已有词语的词频和词性等信息。

支持并发分词:Jieba采用多进程和协程的方式实现并发分词,可以提高分词速度和效率。

除了中文分词功能之外,Jieba还提供了关键词提取、词性标注、繁体转简体、词语拼音转换等功能。可以满足不同的中文文本处理需求。


1 Jieba的搜索模式


1.1 全模式


全模式会将需要分词的文本中所有可能的词语都进行匹配,因此会产生大量的冗余词语。使用Jieba的全模式,比如我们希望把美国数据仓库巨头发布开源模型,公开挑战ChatGPT这句话进行分词:

import jieba    
text = '美国数据仓库巨头发布开源模型,公开挑战ChatGPT'  
seg_list = jieba.cut(text, cut_all=True)  
print("/".join(seg_list))


在上述代码中,cut_all=True指定了使用全模式进行分词,"/".join(seg_list)会将分词结果以斜杠分隔输出。这段的输出结果为:


可以看到分词结果中,数据仓库被分为了数据、仓库、数据仓库三个独立的词语,因此会产生大量的冗余词语。全模式适合于对文本中所有可能的词语进行匹配的场景,例如搜索引擎的索引处理、关键词提取等。


1.2 精确模式


精确模式会将需要分词的文本中可能存在的词语都进行匹配,但不会产生冗余词语。使用Jieba的精确模式,可以通过以下方式实现:


import jieba    
text = '美国数据仓库巨头发布开源模型,公开挑战ChatGPT'  
seg_list = jieba.cut(text, cut_all=False)  
print("/".join(seg_list))

上述代码中,cut_all=False指定了使用精确模式进行分词。这段的输出结果为:

f57b45d9c1b6a4f6dc4e54f15bd1bbdd.png

可以看到,在精确模式下,Jieba会将数据仓库作为一个词语进行匹配,不会产生冗余词语。精确模式适合于对文本中存在的词语进行匹配的场景,例如文本分类、情感分析等。精确模式不会产生冗余词语,因此可以得到准确的分词结果。


1.3 搜索引擎模式


搜索引擎模式使用了基于前缀匹配算法的正向最大匹配(FMM)和逆向最大匹配(RMM)算法,会对需要分词的文本进行分词,并且尽可能多地匹配分词结果。因此,在分词时,搜索引擎模式会优先匹配较长的词语。使用Jieba的搜索引擎模式,可以通过以下方式实现:

import jieba   
text = '美国数据仓库巨头发布开源模型,公开挑战ChatGPT'  
seg_list = jieba.cut_for_search(text)  
print("/".join(seg_list))


这段函数的输出结果为;

1515edf99afe73163543a756dbb819cf.png

由于我们的实例文本过段,在这里的结果与全模式的分词结果并未表现出区别。搜索引擎模式适合于对长文本进行分词的场景,例如自然语言处理、信息检索等。搜索引擎模式使用了基于前缀匹配算法的正向最大匹配(FMM)和逆向最大匹配(RMM)算法,可以尽可能多地匹配分词结果,但可能会对一些新词造成误判,需要进行进一步的处理和校对。


1.4 分词结果的形式选择


正常情况下,分词结果将会以生成器的形式保存,这意味着,当我们像上面一样将分词结果全部打印之后,这个生成器就不能二次使用了。

2dcbf62245cfa32b01eb41e861e9cd87.png


如果希望以列表的形式报错结果。可以将生成器转为list格式:

seg_list = jieba.cut(text)  
print(type(seg_list))  
seg_list = list(seg_list)  
print(type(seg_list))
1

e769cc52d0848b739cb38e28aeaf9783.png


也可以直接指定函数的返回为list,此时我们需要使用函数lcut

seg_list = jieba.lcut(text)  
print(type(seg_list))

2a7b36ec7146ac047263c00aa607284b.png



2 词库的添加与删除


在Jieba中,词库是指用于分词的词典,Jieba提供了内置的词典和用户自定义的词典。用户可以通过添加或删除词语来定制自己的词典。


2.1 添加单个词语


在Jieba中,可以通过调用add_word(word, freq=None, tag=None)方法来向词库中添加单个词语。其中,word为需要添加的词语,freq为该词语的词频,tag为该词语的词性。

例如,假设需要将词语开源模型添加到Jieba的词库中,可以通过如下代码实现:


import jieba  
text = '美国数据仓库巨头发布开源模型,公开挑战ChatGPT'  
jieba.add_word("开源模型")  
seg_list = jieba.cut(text)  
print('/'.join(seg_list))


此时,开源模型就被分为一个词了:

c0241e3194441299101686e5b6b8c737.png

2.2 添加自定义词典


当需要添加的词过多时,建议使用添加词典的方式。自定义词典可以包含用户自己添加的词语及其词频和词性等信息。

添加自定义词典的方法如下:

创建一个文本文件,例如userdict.txt,用于存储自定义词典。每行格式为:词语 词频 词性。

将需要添加的词语及其词频和词性等信息写入到userdict.txt中,每个词语一行。

调用Jieba的load_userdict()方法加载自定义词典文件。

词典示例如下:

开源模型 10 n

深度学习 8 n


其中,10和8为词语的词频,n为词语的词性。之后调用词典即可。

import jieba  
text = '美国数据仓库巨头发布<开源模型>,公开挑战ChatGPT'  
jieba.add_word("<开源模型>")  
seg_list = jieba.cut(text)  
print('/'.join(seg_list))
jieba.del_word("开源模型")
seg_list = jieba.cut(text)  
print('/'.join(seg_list))


此时开源和模型就又变为两个词了。


3.4 添加词库失效的情况

如果想要添加的词包含标点符号,则这个添加操作会失效(无论是添加单个的词语还是使用自定义字典),比如:


import jieba  
text = '美国数据仓库巨头发布<开源模型>,公开挑战ChatGPT'  
jieba.add_word("<开源模型>")  
seg_list = jieba.cut(text)  
print('/'.join(seg_list))


这段代码希望将<开源模型>分为一个词,然而jieba默认标点符号会被单独分割,因此这个添加词库的操作会失效,不但<开源模型>不能被分出来,开源模型也不能被分出来。

ac066a03c52033ec39c33b6fdea00fb8.png


因此,在添加词库时要避免这种情况的出现。


相关文章
|
机器学习/深度学习 自然语言处理 算法
文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)
文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)
8451 0
|
Java 开发工具 Docker
最全解决docker配置kibana报错 Kibana server is not ready yet
最全解决docker配置kibana报错 Kibana server is not ready yet
2056 0
|
机器学习/深度学习 自然语言处理 算法
Jieba分词的准确率提升:使用paddle模式进行分词(使用百度飞桨深度学习模型进行分词)
jieba中的paddle模式是指使用飞桨(PaddlePaddle)深度学习框架加速分词的一种模式。相对于传统的分词算法,paddle模式采用了深度学习模型,可以获得更高的分词准确度和更快的分词速度。
|
10月前
|
人工智能 自然语言处理 算法
大模型备案、登记全流程攻略
在AI浪潮下,大模型技术迅猛发展,为各行业带来变革。为确保算法安全有序发展,需进行相关备案登记。具体包括:大模型备案(面向公众提供生成式服务)、大模型登记(借助第三方大模型)、算法备案(5类算法)及双新评估(舆论属性服务)。未及时备案将面临法律处罚,备案流程涉及属地初审、中央终审等环节,周期约3-4个月。境外模型和特定行业有额外限制,备案后仍需常态化安全管理。
|
机器学习/深度学习 自然语言处理 搜索推荐
一文掌握jieba分词器的常见用法,附带案例
该文章全面介绍了jieba分词器的使用方法,包括安装步骤、不同分词模式的使用,以及如何通过实例代码进行文本分词处理。
1520 0
|
数据采集 存储 自然语言处理
基于网络爬虫的微博热点分析,包括文本分析和主题分析
本文介绍了一个基于Python网络爬虫的微博热点分析系统,使用requests和pandas等库收集和处理数据,结合jieba分词、LDA主题分析和snownlp情感分析技术,对微博文本进行深入分析,并利用matplotlib进行数据可视化,以洞察微博用户的关注点和情感倾向。
756 0
基于网络爬虫的微博热点分析,包括文本分析和主题分析
|
机器学习/深度学习 存储 分布式计算
langchain 入门指南 - LangChainRetrieval
langchain 入门指南 - LangChainRetrieval
568 0
|
安全 网络协议 网络安全
【Python】已解决:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool (host=’ files. pyth
【Python】已解决:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool (host=’ files. pyth
2011 0
|
JSON JavaScript API
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 错误分析
本文探讨了Python中处理JSON数据时遇到的`JSONDecodeError`,该错误通常由JSON格式错误或数据源问题引起。解决方法包括检查数据源、使用异常处理机制和调试日志记录。示例代码展示了如何从文件和API读取JSON并处理异常。注意事项涉及验证JSON规范、处理特殊字符和选择合适解析器。通过这些步骤,可以有效解决JSON解码错误,确保数据正确解析。
2597 0
|
数据采集 存储 自然语言处理
手把手教会你使用Python进行jieba分词
手把手教会你使用Python进行jieba分词
1107 0