Jieba 分词简介

Jieba 是一个用于中文分词的开源库,特别适合处理中文文本。它的名字“结巴”来源于中文“结巴”(stutter),是因为该库能够将中文文本“结巴地”分割成一个个词语。Jieba 提供了多种分词模式,支持自定义词典,并且能够很好地处理中文中的歧义问题。

安装 Jieba

你可以通过 pip 安装 Jieba:

pip install jieba
  • 1.
Jieba 的分词模式

Jieba 提供了三种分词模式:

  1. 精确模式 (default mode):
  • 尽可能精确地切分词语,适合文本分析使用。
  • 示例: "我来到北京清华大学" -> ["我", "来到", "北京", "清华大学"]
  1. 全模式:
  • 把句子中所有可能的词语都扫描出来,但不能解决歧义问题,适合用于需要尽可能多地提取词语的场景。
  • 示例: "我来到北京清华大学" -> ["我", "来到", "北京", "清华", "华大", "大学", "清华大学"]
  1. 搜索引擎模式:
  • 在精确模式的基础上,对长词再次进行切分,适合用于搜索引擎构建索引时的切分。
  • 示例: "我来到北京清华大学" -> ["我", "来到", "北京", "清华", "华大", "大学", "清华大学"]
基本使用
精确模式
import jieba

text = "我来到北京清华大学"
seg_list = jieba.cut(text, cut_all=False)  # 默认使用精确模式
print("精确模式: " + "/ ".join(seg_list))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

输出:

精确模式: 我/ 来到/ 北京/ 清华大学
  • 1.
全模式
seg_list = jieba.cut(text, cut_all=True)
print("全模式: " + "/ ".join(seg_list))
  • 1.
  • 2.

输出:

全模式: 我/ 来到/ 北京/ 清华/ 华大/ 大学/ 清华大学
  • 1.
搜索引擎模式
seg_list = jieba.cut_for_search(text)
print("搜索引擎模式: " + "/ ".join(seg_list))
  • 1.
  • 2.

输出:

搜索引擎模式: 我/ 来到/ 北京/ 清华/ 华大/ 大学/ 清华大学
  • 1.
自定义词典

Jieba 允许用户添加自己的自定义词典,适应特定领域的分词需求。

添加自定义词典

你可以创建一个文本文件(如user_dict.txt),内容格式为:

清华大学 3 nr
北京大学 3 nr
  • 1.
  • 2.
  • 清华大学北京大学 是词语
  • 3 是词频(可选)
  • nr 是词性标签(可选)

然后在代码中加载这个词典:

jieba.load_userdict('user_dict.txt')

text = "我来到北京清华大学"
seg_list = jieba.cut(text)
print("/ ".join(seg_list))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

如果没有词频和词性,Jieba 会自动计算并处理。

动态添加词语

你可以在运行时动态添加新词:

jieba.add_word('新词语')
seg_list = jieba.cut("这是一个新词语")
print("/ ".join(seg_list))
  • 1.
  • 2.
  • 3.
删除词语

你也可以在运行时删除词语:

jieba.del_word('词语')
  • 1.
关键词提取

Jieba 还提供了基于 TF-IDF 和 TextRank 算法的关键词提取功能。

使用 TF-IDF 提取关键词
import jieba.analyse

text = "我来到北京清华大学,清华大学的校园非常美丽。"
keywords = jieba.analyse.extract_tags(text, topK=5, withWeight=True)
for word, weight in keywords:
    print(f"{word}: {weight}")
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
使用 TextRank 提取关键词
keywords = jieba.analyse.textrank(text, topK=5, withWeight=True)
for word, weight in keywords:
    print(f"{word}: {weight}")
  • 1.
  • 2.
  • 3.
词性标注

Jieba 支持对分词结果进行词性标注:

import jieba.posseg as pseg

words = pseg.cut("我爱北京天安门")
for word, flag in words:
    print(f"{word}: {flag}")
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

输出:

我: r
爱: v
北京: ns
天安门: ns
  • 1.
  • 2.
  • 3.
  • 4.
并行分词

Jieba 还支持并行分词,加快大文本的处理速度:

seg_list = jieba.cut(text, cut_all=False, HMM=True)
print(" ".join(seg_list))
  • 1.
  • 2.

并行分词的性能取决于文本长度和CPU核心数量。通常,对于短文本,并行分词可能不如单线程模式。

总结

Jieba 是一个功能强大的中文分词库,支持多种分词模式、关键词提取、词性标注以及自定义词典。它能够处理各种中文分词需求,尤其适合自然语言处理任务中的文本预处理阶段。通过Jieba,你可以灵活地处理中文文本,实现高效、准确的分词。