目录
- 为什么需要中文分词?
- 主流的 Python 中文分词库
- 环境准备:安装 Python
- 分词库安装与实战
- Jieba (结巴分词) - 入门首选,功能全面
- pkuseg - 高精度,北大出品
- LTP (Language Technology Platform) - 哈工大出品,功能强大
- THULAC (清华分词) - 清华出品,兼顾精度和效率
- 如何选择分词库?
- 进阶:自定义词典
为什么需要中文分词?
与英语等使用空格作为天然分界符的语言不同,中文句子中的词语是由连续的汉字组成的,没有明显的分隔符。
"我爱北京天安门"
人可以轻松地理解这是由 "我", "爱", "北京", "天安门" 四个词语组成的,但对于计算机来说,这是一个连续的字符串。
中文分词就是将连续的汉字序列,按照一定的规范切分成一个一个独立的词语,它是自然语言处理 的基础步骤,几乎所有中文相关的 NLP 任务(如情感分析、文本分类、命名实体识别、机器翻译等)都离不开分词。
主流的 Python 中文分词库
在 Python 生态中,有几个非常优秀的中文分词库:
| 库名 | 特点 | 适用场景 | 备注 |
|---|---|---|---|
| Jieba (结巴) | 轻量、易用、功能全,支持三种分词模式。 | 初学者、通用场景、快速原型开发。 | 最流行,社区最活跃,是入门首选。 |
| pkuseg | 基于预训练模型,精度高,对新词识别能力强。 | 对分词精度要求高的项目,如学术研究、企业级应用。 | 由北京大学语言计算实验室出品。 |
| LTP (哈工大LTP) | 功能强大,不仅分词,还提供词性标注、命名实体识别、依存句法分析等一站式服务。 | 需要完整 NLP 流水线的项目,不仅仅是分词。 | 哈工大社会计算与信息检索研究中心出品。 |
| THULAC | 精度高,速度快,由清华大学自然语言处理实验室出品。 | 对速度和精度都有一定要求的场景。 | 清华出品,质量有保障。 |
环境准备:安装 Python
如果你还没有安装 Python,请先完成以下步骤:
- 下载安装包:访问 Python 官网,下载适用于 Windows 的最新稳定版安装程序。
- 安装:运行安装程序。最重要的一步:在安装界面,务必勾选 "Add Python to PATH" (将 Python 添加到环境变量),这会让你在命令行中直接使用
python命令。 - 验证:打开命令提示符 或 PowerShell,输入
python --version,如果能显示 Python 版本号,则安装成功。
分词库安装与实战
打开你的命令提示符 或 PowerShell,然后依次安装和测试各个库。
A. Jieba (结巴分词) - 入门首选
安装
pip install jieba
代码示例 Jieba 提供了三种分词模式,非常灵活。
import jieba
# 待分词的文本
sentence = "我爱北京天安门,天安门上太阳升。"
# 1. 精确模式 (默认)
# 这是最常用的模式,试图将句子最精确地切开,适合文本分析。
seg_list_exact = jieba.cut(sentence, cut_all=False)
print("精确模式:", "/".join(seg_list_exact))
# 输出: 我爱/北京/天安门/,/天安门/上/太阳升/。
# 2. 全模式
# 把句子中所有可以成词的词语都扫描出来,速度很快,但是不能解决歧义。
seg_list_full = jieba.cut(sentence, cut_all=True)
print("全模式:", "/".join(seg_list_full))
# 输出: 我爱/北京/天安门/,/天安门/上/太阳升/。/北京/天安门/上/太阳/。
# 3. 搜索引擎模式
# 在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎构建倒排索引。
seg_list_search = jieba.cut_for_search(sentence)
print("搜索引擎模式:", "/".join(seg_list_search))
# 输出: 我/爱/北京/天安门/,/天安门/上/太阳/升/。/北京/天安门/上/太阳升/。
# 4. 获取词性标注 (需要配合 `jieba.posseg`)
import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
print(f"{word} ({flag})")
# 输出:
# 我 (r)
# 爱 (v)
# 北京 (ns)
# 天安门 (ns)
# , (x)
B. pkuseg - 高精度分词
安装
pip install pkuseg
代码示例 pkuseg 的使用非常简单,并且预训练模型效果很好。
import pkuseg
# 初始化模型,'default' 是预训练好的通用模型
# 首次运行会自动下载模型文件,请保持网络畅通
seg = pkuseg.pkuseg()
# 待分词的文本
sentence = "我爱北京天安门,天安门上太阳升。"
# 进行分词
seg_list = seg.cut(sentence)
# 输出结果
print("pkuseg 分词结果:", "/".join(seg_list))
# 输出: pkuseg 分词结果: 我爱/北京/天安门/,/天安门/上/太阳升/。
# 如果想使用更细粒度的模型,可以指定 model_name
# seg = pkuseg.pkuseg(model_name='news') # 新闻领域模型
C. LTP (哈工大LTP) - 一站式NLP
安装
pip install ltp
代码示例 LTP 不仅仅分词,还能提供更多功能。
from ltp import LTP
# 初始化 LTP,首次运行会自动下载模型
ltp = LTP()
# 待分词的文本
sentence = "我爱北京天安门"
# cws = Chinese Word Segmentation (分词)
# pos = Part-of-Speech Tagging (词性标注)
# ner = Named Entity Recognition (命名实体识别)
# 其他功能还包括依存句法分析、语义角色标注等
# 进行分词
cws_result = ltp.pipeline([sentence], tasks=["cws"])
print("LTP 分词结果:", cws_result.cws[0])
# 输出: LTP 分词结果: ['我', '爱', '北京', '天安门']
# 如果想一次性获取多个任务的结果
# ltp.pipeline([sentence], tasks=["cws", "pos", "ner"])
# pos_result = ltp.pos
# ner_result = ltp.ner
# print("词性标注:", pos_result)
# print("命名实体:", ner_result)
D. THULAC - 清华出品
安装
pip install thulac
代码示例 THULAC 的 API 设计也很简洁。
import thulac
# 初始化模型
# model_path 可以指定模型路径,不指定则自动下载
# thulac = thulac.thulac() # 默认模式
thulac = thulac.thulac(seg_only=True) # 只进行分词,不进行词性标注,速度更快
# 待分词的文本
sentence = "我爱北京天安门,天安门上太阳升。"
# 进行分词
result = thulac.cut(sentence)
# THULAC 返回的是列表,每个元素是 (词语, 词性) 的元组
# 如果使用 seg_only=True,则直接返回词语列表
print("THULAC 分词结果:", "/".join(result))
# 输出: THULAC 分词结果: 我/爱/北京/天安门/,/天安门/上/太阳升/。
如何选择分词库?
- 如果你是初学者,或者只是想快速完成一个文本分析任务,首选 Jieba,它的文档完善,社区活跃,遇到问题很容易找到解决方案。
- 如果你的项目对分词精度有极高要求,比如用于学术论文、商业产品等,强烈推荐 pkuseg,它在通用领域的表现非常出色。
- 如果你的项目不仅仅需要分词,还需要词性标注、实体识别等多种NLP功能,LTP 是不二之选,它提供了一整套解决方案。
- 如果你在追求高精度的同时,也对处理速度有要求,可以尝试 THULAC。
进阶:自定义词典
在实际应用中,通用词典可能无法满足所有需求,你可能需要识别一些新词(如 "元宇宙"、"ChatGPT")、专业术语(如 "卷积神经网络")或者特定领域的词汇。
大部分分词库都支持自定义词典。
以 Jieba 为例:
-
创建一个词典文件,
my_dict.txt。my_dict.txt内容格式为:词语 词频 词性 (可选)元宇宙 100 n ChatGPT 50 eng 卷积神经网络 50 n -
在代码中加载词典
import jieba # 加载自定义词典 jieba.load_userdict("my_dict.txt") sentence = "我对元宇宙和ChatGPT很感兴趣,尤其是卷积神经网络。" seg_list = jieba.cut(sentence) print("使用自定义词典:", "/".join(seg_list)) # 输出: 使用自定义词典: 我/对/元宇宙/和/ChatGPT/很/感兴趣/,/尤其/是/卷积神经网络/。你可以看到,"元宇宙"、"ChatGPT" 和 "卷积神经网络" 都被正确地识别为一个完整的词。
在 Windows 系统下使用 Python 进行中文分词,流程非常清晰:
- 安装 Python 并确保添加到环境变量。
- 根据需求选择并安装分词库 (
pip install jieba/pkuseg/ltp/thulac)。 - 编写 Python 代码,调用库的接口进行分词。
- 根据实际效果进行调整,如使用自定义词典优化特定领域的分词结果。
希望这份详细的指南能帮助你在 Windows 环境下顺利开展中文分词工作!
