nlp-Jieba分词

299 阅读6分钟

jieba分词详解:中文自然语言处理的基础工具

在自然语言处理(NLP)领域,分词是中文文本处理的第一步也是非常关键的一步。与英文等西方语言不同,中文词语之间没有明显的分隔符,因此需要专门的分词工具来将连续的汉字序列切分成有意义的词语单元。jieba分词作为Python中最流行的中文分词库,为中文文本处理提供了强大而便捷的支持。

jieba分词背景与价值

jieba分词是GitHub上star数量最多的中文分词项目之一,由Sun Junyi开发并维护。它基于前缀词典和Trie树结构实现高效的分词算法,并结合了HMM(隐马尔可夫模型)来识别未登录词。jieba分词的价值主要体现在:

  1. 开源免费:完全开源,可以自由使用和修改
  2. 准确率高:基于大规模语料库训练,分词准确率高
  3. 性能优秀:算法优化良好,处理速度快
  4. 功能丰富:支持多种分词模式和词性标注
  5. 易于使用:API简洁明了,学习成本低

jieba分词的三种主要模式

1. 精确模式(默认模式)

精确模式试图将句子最精确地切开,适合文本分析和关键词提取等任务。

# 导入 jieba库
import jieba

# 先创造一个数据语句, 作为预料,进行测试使用
content = '新东方是一家上市公司,旗下的东方甄选品牌.我在新东方学习烹饪技术了, 下一个是挖掘机,hhh'

# 使用lcut,  默认是基准模式
res = jieba.lcut(content)
print(res, 'lcut')

# 使用cut
res_cut = jieba.cut(content)
print(res_cut)
['新东方', '是', '一家', '上市公司', ',', '旗下', '的', '东方', '甄选', '品牌', '.', '我', '在', '新东方', '学习', '烹饪', '技术', '了', ',', ' ', '下', '一个', '是', '挖掘机', ',', 'hhh'] lcut
<generator object Tokenizer.cut at 0x000001BD78573A00>

2. 全局模式(全模式)

全局模式会扫描句子中所有可能成词的词语,速度很快但存在歧义问题。

import jieba
content = '新东方是一家上市公司,旗下的东方甄选品牌.我在新东方学习烹饪技术了, 下一个是挖掘机,hhh'

# 全局模式
res_full = jieba.lcut(content, cut_all=True)
res_normal = jieba.lcut(content)
print(res_full, 'full')
print(res_normal, 'normal')

# 结论:
## normal的切词会少很多, 但是语义化还是还是与原文相同, full做了很多, 但是与原文语义已经完全失真了
['新东', '新东方', '东方', '是', '一家', '上市', '上市公司', '公司', ',', '旗下', '的', '东方', '甄选', '选品', '品牌', '.', '我', '在', '新东', '新东方', '东方', '东方学', '学习', '烹饪', '技术', '了', ',', ' ', '', '下', '一个', '是', '挖掘', '挖掘机', ',', 'hhh'] full
['新东方', '是', '一家', '上市公司', ',', '旗下', '的', '东方', '甄选', '品牌', '.', '我', '在', '新东方', '学习', '烹饪', '技术', '了', ',', ' ', '下', '一个', '是', '挖掘机', ',', 'hhh'] normal

3. 搜索引擎模式

搜索引擎模式在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎构建。

import jieba
content = '新东方是一家上市公司,旗下的东方甄选品牌.我在新东方学习烹饪技术了, 下一个是挖掘机,hhh'

# 搜索引擎模式: 用于搜索引擎
res_search = jieba.lcut_for_search(content)
res_normal = jieba.lcut(content)
print(res_normal)
print(res_search)

# 结论:
## 搜索引擎模式会比精准模式多了一些, 但是对于搜索会很有用, 但是对于正常的分词还是不需要使用的
['新东方', '是', '一家', '上市公司', ',', '旗下', '的', '东方', '甄选', '品牌', '.', '我', '在', '新东方', '学习', '烹饪', '技术', '了', ',', ' ', '下', '一个', '是', '挖掘机', ',', 'hhh']
['新东', '东方', '新东方', '是', '一家', '上市', '公司', '上市公司', ',', '旗下', '的', '东方', '甄选', '品牌', '.', '我', '在', '新东', '东方', '新东方', '学习', '烹饪', '技术', '了', ',', ' ', '下', '一个', '是', '挖掘', '挖掘机', ',', 'hhh']

高级功能

繁体字支持

jieba分词可以很好地处理繁体中文文本:

import jieba
content = '新东方是一家上市公司,旗下的东方甄选品牌.我在新东方学习烹饪技术了, 下一个是挖掘机,hhh'

# 支持繁体分词
fanti_content = '中華民族的偉大復興, 起來起來, 不願意做奴隸的人民, 把我們的血肉築起新的長城,'

res_fanti = jieba.lcut(fanti_content)
print(res_fanti)
['中華', '民族', '的', '偉大', '復', '興', ',', ' ', '起來', '起來', ',', ' ', '不願意', '做', '奴隸', '的', '人民', ',', ' ', '把', '我們', '的', '血肉', '築起', '新', '的', '長', '城', ',']

自定义词典

jieba支持用户自定义词典,可以解决特定领域术语的分词问题:

# 支持用户自定义词典, 人为修正jieba分词错误情况

# user_dict.txt内容如下
# ```text
# 东方甄选
# ```
import jieba
content = '新东方是一家上市公司,旗下的东方甄选品牌.我在新东方学习烹饪技术了, 下一个是挖掘机,hhh'

jieba.load_userdict('data/user_dict.txt')
res = jieba.lcut(content)
print(res)
['新东方', '是', '一家', '上市公司', ',', '旗下', '的', '东方甄选', '品牌', '.', '我', '在', '新东方', '学习', '烹饪', '技术', '了', ',', ' ', '下', '一个', '是', '挖掘机', ',', 'hhh']

词性标注

jieba还支持词性标注功能,可以识别名词、动词、形容词等词性:

# 词性标注

# 名词, 动词, 时间词, 货币, 单位, 尺寸, 地名, 专有名词, 代词, 助词等等
content = '我爱上海的东方明珠'

import jieba.posseg as pseg
# 可以将对应的词进行区分

res = pseg.lcut(content)

print(res)

for x in res:
    print(x)
    print(x.word, 'word')
    print(x.flag, 'flag')
[pair('我', 'r'), pair('爱', 'v'), pair('上海', 'ns'), pair('的', 'uj'), pair('东方明珠', 'nr')]
我/r
我 word
r flag
爱/v
爱 word
v flag
上海/ns
上海 word
ns flag
的/uj
的 word
uj flag
东方明珠/nr
东方明珠 word
nr flag

应用场景与价值意义

jieba分词在实际应用中具有广泛的价值:

1. 文本挖掘与分析

  • 情感分析:将用户评论分词后进行情感倾向判断
  • 关键词提取:从大量文本中提取核心关键词
  • 文本聚类:对相似主题的文本进行自动归类

2. 搜索引擎优化

  • 提高搜索准确率:通过对查询词和文档内容进行分词,提高匹配精度
  • 查询扩展:基于分词结果进行同义词扩展

3. 机器翻译

  • 作为中文机器翻译系统的基础预处理步骤

4. 舆情监控

  • 对社交媒体内容进行分词,提取热点话题和关键词

5. 智能客服

  • 对用户问题进行分词理解,匹配最佳答案

性能对比与选择建议

分词模式速度准确率适用场景
精确模式中等文本分析、关键词提取
全模式中等词典构建、关键词扩展
搜索引擎模式中等搜索引擎、信息检索

在实际应用中,建议根据具体需求选择合适的分词模式:

  • 对于一般文本分析任务,推荐使用精确模式
  • 对于搜索引擎相关应用,推荐使用搜索引擎模式
  • 对于需要最大化召回率的场景,可以考虑全模式

总结

jieba分词作为中文自然语言处理的重要工具,为中文文本分析提供了坚实的基础。通过灵活运用其多种分词模式和高级功能,我们可以更好地处理中文文本数据,为后续的自然语言处理任务打下良好基础。随着深度学习技术的发展,虽然出现了基于神经网络的分词方法,但jieba分词凭借其稳定性、高效性和易用性,在实际项目中仍然具有重要价值。