jieba 是一个python实现的分词库,对中文有着很强大的分词能力,我们在使用时通过import jieba 导入 jieba库:
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) | 向分词词典中增加新词 |
精确模式:
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))
运行结果:
【搜索引擎模式下的分词:】万里/ 里长/ 长城/ 万里长城/ 是/ 中国/ 古代/ 劳动/ 人民/ 血汗/ 的/ 结晶/ 和/ 中国/ 古代/ 文化/ 的/ 象征/ 和/ 中华/ 民族/ 中华民族/ 的/ 骄傲
有的时候,如果按照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))
运行结果:
我/ 不喜欢/ 下雨天/ 刮风
分词成功以后,我们通常需要提取关键词,而关键词通常是名词、动名词或者名词的词组,所以在提取关键词之前,我们可以先对提取出来的词语做一下词性标注,以便于后续分类。
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