Python进行中文分词
1. jieba库概述
jieba(“结巴”)是Python中最流行的中文分词库,采用基于前缀词典实现的高效分词算法,支持多种分词模式,是中文自然语言处理(NLP)的基础工具。
核心特性
- 精确模式:试图将句子最精确地切开,适合文本分析
- 全模式:把句子中所有可以成词的词语都扫描出来,速度非常快但有冗余
- 搜索引擎模式:在精确模式基础上,对长词再次切分,提高召回率
- 支持自定义词典:可添加专业领域词汇提高分词准确度
- 支持词性标注:可标注分词结果的词性
- 支持并行分词:利用多核CPU加速分词处理
2. jieba.cut函数
import jieba
seg_list = jieba.cut("这是一个测试文本", cut_all=False)
参数说明
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
sentence | str | 必需 | 待分词的字符串 |
cut_all | bool | False | 是否采用全模式 |
HMM | bool | True | 是否使用HMM模型 |
use_paddle | bool | False | 是否使用PaddlePaddle模型(需额外安装) |
返回值
关键点:jieba.cut()返回的是生成器(Generator),不是列表或元组。
这意味着:生成器只能被迭代一次,之后就会耗尽,无法直接索引(如seg_list[0]会报错),无法直接获取长度(如len(seg_list)会报错),内存效率高,适合处理大文本,但需要特别注意使用方式。
3. 使用示例
# 安装
pip install jieba
import jieba
from collections import Countertext = "本周进行自然语言处理系列文档示例,示例围绕自然语言处理程序。"
words = jieba.cut(text)words_list = list(words)
words_count = Counter(words_list)
words_filter = [word for word, count in words_count.items() if count > 1]print("分词结果:", words_list)
print("词频:", words_count)
print("高频词汇:", words_filter)
4. 其他常用函数
jieba.lcut(sentence, cut_all=False, HMM=True, use_paddle=False)
功能:与cut()功能相同,但直接返回列表而非生成器,解决了生成器只能迭代一次的问题,便于多次使用分词结果。
jieba.cut_for_search(sentence, HMM=True)
功能:搜索引擎模式分词,对长词再次切分以提高召回率,在精确模式基础上,对未在词典中找到的长词进行二次切分
jieba.posseg.cut(sentence, HMM=True)
功能:提供词性标注功能,基于精确模式分词并标注词性
jieba.add_word(word, freq=None, tag=None)
功能:向分词词典中添加新词
参数:
word:要添加的词语;
freq:词频(可选),用于调整词语切分优先级;
tag:词性(可选)
jieba.load_userdict(file_name)
功能:加载自定义词典文件
文件格式:每行一个词,格式为:词语 词频 词性(词频和词性可选)
jieba.tokenize(sentence, mode=‘default’, HMM=True)
功能:返回词语在原文中的位置信息
参数:mode:‘default’(精确模式)或’search’(搜索引擎模式)
返回值:元组列表,每个元组包含(词语, 起始位置, 结束位置)
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
功能:基于TF-IDF算法提取关键词
参数:
topK:返回关键词数量
withWeight:是否返回权重值
allowPOS:仅提取指定词性的词
jieba.enable_parallel(num)
功能:利用多核CPU加速分词处理,启用并行分词,参数为并行进程数,程序结束可以调用jieba.disable_parallel()关闭并行分词