利用jieba对中文进行分词


  由于中文文本中的单词不是通过空格或者标点符号分割,所以中文及类似语言存在一个重要的“分词” 问题,jieba、SnowNLP(MIT)、pynlpir等都可以完成对中文的分词处理,该文章采用 jieba进行中文分词。
  使用之前,我们需要先下载jieba库,而在Windows下使用pip安装python第三方库的时候,经常会因为墙的原因下载不上第三方的库文件,所以下载方法见我之前文章 Anaconda3安装jieba库和NLTK库

1、jieba库基本介绍

1.1 jieba库概述

jieba 是一个python实现的分词库,对中文有着很强大的分词能力,我们在使用时通过import jieba 导入 jieba库:

  • 中文文本需要通过分词获得单个的词语;
  • jieba是优秀的中文分词第三方库,需要额外安装;
  • jieba库提供三种分词模式,最简单只需掌握一个函数。
1.2 jieba分词的原理

Jieba分词依靠中文词库:

  • 利用一个中文词库,确定汉字之间的关联概率;
  • 汉字间概率大的组成词组,形成分词结果;
  • 除了分词,用户还可以添加自定义的词组。
1.3 jieba库使用说明

(1)、jieba分词的三种模式

精确模式、全模式、搜索引擎模式:

  • 精确模式:把文本精确的切分开,不存在冗余单词。
  • 全模式:把文本中所有可能的词语都扫描出来,有冗余。
  • 搜索引擎模式:在精确模式基础上,对长词再次切分。

(2)、jieba库常用函数

函数描述
jieba.cut(txt)精确模式,返回一个可迭代的数据类型
jieba.lcut(txt)精确模式,返回一个列表类型,建议使用
jieba.cut(txt,cut_all = True)全模式,输出文本txt中所有可能单词
jieba.lcut(txt,cut_all = True)全模式,返回一个列表类型,建议使用
jieba.cut_for_search(txt)搜索引擎模式
jieba.lcut_for_search(txt)搜索引擎模式,返回一个列表类型,建议使用
jieba.add_word(txt)向分词词典中增加新词

2、分词实例

2.1 三种模式实例对比

精确模式:

import jieba
messages = jieba.cut("万里长城是中国古代劳动人民血汗的结晶和中国古代文化的象征和中华民族的骄傲",cut_all=False)   #精确模式
print ( '【精确模式下的分词:】'+"/ ".join(messages)) 

运行结果:

【精确模式下的分词:】万里长城/ 是/ 中国/ 古代/ 劳动/ 人民/ 血汗/ 的/ 结晶/ 和/ 中国/ 古代/ 文化/ 的/ 象征/ 和/ 中华民族/ 的/ 骄傲

  这里我们需要注意的是,jieba默认模式即为精确模式,所以使用下列表达也是同样的效果,即省略cut_all=False:

import jieba
messages = jieba.cut("万里长城是中国古代劳动人民血汗的结晶和中国古代文化的象征和中华民族的骄傲")   #默认精确模式
print ( '【精确模式下的分词:】'+"/ ".join(messages)) 

全模式:

import jieba
messages = jieba.cut("万里长城是中国古代劳动人民血汗的结晶和中国古代文化的象征和中华民族的骄傲",cut_all=True)   #全模式
print ( '【全模式下的分词:】'+"/ ".join(messages)) 

运行结果:

【全模式下的分词:】万里/ 万里长城/ 里长/ 长城/ 是/ 中国/ 古代/ 代劳/ 劳动/ 动人/ 人民/ 血汗/ 的/ 结晶/ 和/ 中国/ 古代/ 文化/ 的/ 象征/ 和/ 中华/ 中华民族/ 民族/ 的/ 骄傲

可以明显看到文本存在冗余单词。

搜索引擎模式:

import jieba
messages = jieba.cut_for_search("万里长城是中国古代劳动人民血汗的结晶和中国古代文化的象征和中华民族的骄傲")   #搜索引擎模式
print ( '【搜索引擎模式下的分词:】'+"/ ".join(messages)) 

运行结果:

【搜索引擎模式下的分词:】万里/ 里长/ 长城/ 万里长城/ 是/ 中国/ 古代/ 劳动/ 人民/ 血汗/ 的/ 结晶/ 和/ 中国/ 古代/ 文化/ 的/ 象征/ 和/ 中华/ 民族/ 中华民族/ 的/ 骄傲
2.2 调整词频

  有的时候,如果按照jieba正常分词,会把我们不希望分开的词语给分开,这个时候就会改变句子的意思。就如以下例子,我们希望 不喜欢 是一个词,不被分开:

import jieba
messages = jieba.cut("我不喜欢下雨天刮风")   #默认精确模式
print ( "/ ".join(messages)) 

运行结果:

我/ 不/ 喜欢/ 下雨天/ 刮风

  这个时候,我们可以使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来:

import jieba
messages = jieba.cut("我不喜欢下雨天刮风")   #默认精确模式
jieba.suggest_freq(('不喜欢'),tune=True)
print ( "/ ".join(messages)) 

运行结果:

我/ 不喜欢/ 下雨天/ 刮风
2.3 分词后词性标注

  分词成功以后,我们通常需要提取关键词,而关键词通常是名词、动名词或者名词的词组,所以在提取关键词之前,我们可以先对提取出来的词语做一下词性标注,以便于后续分类。

import jieba.posseg as contents    #词性标注
messages = contents.cut('万里长城是中国古代劳动人民血汗的结晶')
for message in messages:    #使用for循环逐一获取划分后的词语
    print(message.word,message.flag)

运行结果:

万里长城 ns
是 v
中国 ns
古代 t
劳动 vn
人民 n
血汗 n
的 uj
结晶 n
  • 9
    点赞
  • 53
    收藏 更改收藏夹
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK-Berry

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值