github: https://github.com/fxsjy/jieba
1、jieba 分词库简介
“结巴”中文分词:做最好的 Python 中文分词组件
jieba 分词库支持三种分词模式:精确模式、全模式和搜索引擎模式。此外,它还提供了添加自定义词典、关键词提取和词性标注等高级功能,满足不同场景下的分词和文本处理需求。
- 精确模式:将句子最精确地切开,适合文本分析。
- 全模式:扫描出句子中所有可能的词语,速度快但存在冗余。
全模式从待分词内容的第一个字开始遍历,将每一个字作为词语的第一个字,返回所有可能的词语,会重复利用词语和字,因此也可能会出现多种含义
- 搜索引擎模式:在精确模式的基础上,对长词按照全模式进行再次切分,提高召回率,适用于搜索引擎。
2、jieba 分词库安装
在使用 jieba 分词库之前,首先需要确保已经安装了 Python 环境。然后,通过 pip 命令可以轻松地安装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(隐马尔可夫模型) 模型。
|
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 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)
jieba.add_word('人民广场',freq=5,tag='n')
print(jieba.user_word_tag_tab)
string='上海市浦东新区世纪大道100号楼501' text_cut=jieba.cut(string) print(" ".join(text_cut))
jieba.suggest_freq(('上海市','浦东新区'),tune=True) text_cut=jieba.cut(string) print(" ".join(text_cut))
|