Python 第三方模块之 jieba - 分词

github: https://github.com/fxsjy/jieba

1、jieba 分词库简介

“结巴”中文分词:做最好的 Python 中文分词组件

jieba 分词库支持三种分词模式:精确模式、全模式和搜索引擎模式。此外,它还提供了添加自定义词典、关键词提取和词性标注等高级功能,满足不同场景下的分词和文本处理需求。

  • 精确模式:将句子最精确地切开,适合文本分析。
  • 全模式:扫描出句子中所有可能的词语,速度快但存在冗余。
    全模式从待分词内容的第一个字开始遍历,将每一个字作为词语的第一个字,返回所有可能的词语,会重复利用词语和字,因此也可能会出现多种含义
  • 搜索引擎模式:在精确模式的基础上,对长词按照全模式进行再次切分,提高召回率,适用于搜索引擎。

2、jieba 分词库安装

在使用 jieba 分词库之前,首先需要确保已经安装了 Python 环境。然后,通过 pip 命令可以轻松地安装jieba:

1
pip install jieba

3、基础分词

3.1、语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
jieba.cut(sentence, cut_all=False, HMM=True, use_paddle=False):
参数
string:需要接受分词的字符串。
cut_all:控制是否采用全模式分词发,参数为 True 时表示采用全模式。
HMM:控制是否使用 HMM(隐马尔可夫模型) 模型,参数为 True 时表示使用 HMM(隐马尔可夫模型) 模型。


jieba.cut_for_search(sentence, HMM=True)
参数
string:需要接受分词的字符串。
HMM:控制是否使用 HMM(隐马尔可夫模型) 模型,参数为 True 时表示使用 HMM(隐马尔可夫模型) 模型。


# jieba.cut 和 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语。
# jieba.lcut 和 jieba.lcut_for_search 参数和上面两个方法一致但返回的是一个list。

3.2 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import jieba

# 精确模式
text = "我爱北京天安门"
seg_list = jieba.cut(text, cut_all=False)
print("精确模式: " + "/ ".join(seg_list)) # 精确模式: 我/ 爱/ 北京/ 天安门

# 全模式
seg_list = jieba.cut(text, cut_all=True)
print("全模式: " + "/ ".join(seg_list)) # 全模式: 我/ 爱/ 北京/ 天安门/ 我爱/ 爱北京/ 北京天安门

# 搜索引擎模式
seg_list = jieba.cut_for_search(text)
print("搜索引擎模式: " + "/ ".join(seg_list)) # 搜索引擎模式: 我/ 爱/ 北京/ 天安门/ 天安门

4、添加自定义词典

假设我们需要对一篇关于“机器学习”的文章进行分词,但 jieba 默认词典中可能不包含一些专业术语。此时,我们可以通过添加自定义词典来优化分词效果。

4.1、语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
jieba.load_userdict(file_name)
作用:加载自定义字典
参数
filename:为文件类对象或自定义词典的路径
词典格式分为3个部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。


jieba.add_word(word, freq=None,tag=None) # add_word有3个参数,添加词名称,词频,词性
jieba.del_word(word) # del_word 只有一个参数词语名称
作用:从字典中添加或删除词汇


jieba.suggest_freq(segment,tune=True)
作用:调节单个词语的词频,可以使其能(或不能)被分出来,在分词时,词频越高,能够被分出来的概率越大。

4.2、示例

自定义词典格式要和默认词典dict.txt一样,一个词占一行,每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

创建一个自定义词典文件user_dict.txt,内容如下:

1
2
3
机器学习 5
深度学习 3
神经网络 2

然后,在代码中加载该词典并进行分词:

1
2
3
4
5
6
7
8
9
import jieba

# 加载自定义词典
jieba.load_userdict('user_dict.txt')

# 使用自定义词典进行分词
text = "机器学习是深度学习的一个重要分支,而神经网络是深度学习的核心"
seg_list = jieba.cut(text, cut_all=False)
print("/ ".join(seg_list)) # 机器学习/ 是/ 深度学习/ 的/ 一个/ 重要/ 分支/ ,/ 而/ 神经网络/ 是/ 深度学习/ 的/ 核心

示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import jieba

#载入自定义词典
jieba.load_userdict('word_dict.txt')

#查看用户自定义词典中的内容
print(jieba.user_word_tag_tab) # {'世纪大道': 'n', '浦东新区 2 ': 'n', '世纪公园 3 ': 'n'}

#往自定义词典中添加新词
jieba.add_word('人民广场',freq=5,tag='n')

#添加新词后的结果
print(jieba.user_word_tag_tab) # {'世纪大道': 'n', '浦东新区 2 ': 'n', '世纪公园 3 ': 'n', '人民广场': 'n'}

string='上海市浦东新区世纪大道100号楼501'
text_cut=jieba.cut(string)
print(" ".join(text_cut)) # 上海市浦东新区 世纪大道 100 号楼 501

#调整词频,重新分词
jieba.suggest_freq(('上海市','浦东新区'),tune=True)
text_cut=jieba.cut(string)
print(" ".join(text_cut)) # 上海市 浦东新区 世纪大道 100 号楼 501

Python 第三方模块之 jieba - 分词
https://flepeng.github.io/021-Python-33-Python-第三方模块-Python-第三方模块之-jieba-分词/
作者
Lepeng
发布于
2016年8月3日
许可协议