声明:本文参考jieba官方文档而成,官方链接:https://github.com/fxsjy/jieba
【一】jieba安装
pip install jieba
【二】jieba简介
简介可见jieba官方说明:https://pypi.org/project/jieba/
总而言之,jieba用于中文分词,支持的文本编码格式为utf-8,支持的功能包括:中文分词、关键字提取、词性标注
整体功能如下图:
【三】结巴使用之分词
1. 使用精确模式
# -*- coding:utf-8 -*-
import jieba
sentence = "我爱北京天安门"
seg = jieba.cut(sentence=sentence)
print("/".join(seg))
结果如下:
我/爱/北京/天安门
2. 使用全模式
import jieba
sentence = "我爱北京天安门"
seg = jieba.cut(sentence=sentence,cut_all=True)
print("/".join(seg))
结果如下:
我/爱/北京/天安/天安门
3.使用搜索模式
# -*- coding:utf-8 -*-
import jieba
sentence = "我爱北京天安门"
seg = jieba.cut_for_search(sentence=sentence)
print("/".join(seg))
结果如下:
我/爱/北京/天安/天安门
关于三种模式的区别,可见官方描述:
4. 分词接口详解
4.1 cut接口,该接口接受三个参数,重点关注一下第一个参数:要求句子编译格式为unicode编码。所以,如果是GBK编码,需要先转换为utf-8接口的编码格式。
cut(self, sentence, cut_all=False, HMM=True)
- sentence: The str(unicode) to be segmented.
- cut_all: Model type. True for full pattern, False for accurate pattern.
- HMM: Whether to use the Hidden Markov Model.
当我们不知道文档的编码格式时,可以采用如下代码:
import chardet
with open("xxx.txt",'rb') as f:
data = f.read()
print(chardet.detect(data))
输出结果为:
{'confidence': 0.99, 'language': 'Chinese', 'encoding': 'GB2312'}
4.2 cut_for_search接口
cut_for_search(self, sentence, HMM=True)
4.3 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
print(jieba.lcut(sentence))
print(jieba.lcut_for_search(sentence))
结果如下:
['我', '爱', '北京', '天安门']
['我', '爱', '北京', '天安', '天安门']
【四】自定义词典
1. 先看看jieba自带的词典长啥样
jieba/dict.txt
T恤 4 n
A座 3 n
A股 3 n
A型 3 n
A轮 3 n
可以看出,jieba的词典组成格式为:一行一个词语,词语 词频 词性
据jieba官方介绍:
词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒
2. 自定一一个字典
我 4 n
北京 3 n
天安门
3. 使用自定义词典
jieba.load_userdict(r"D:\jieba-0.39\my_dict.txt")
print(jieba.lcut(sentence))
print(jieba.lcut_for_search(sentence))
结果如下:
['我', '爱', '北京', '天安门']
['我', '爱', '北京', '天安', '天安门']
【五】调整词典
jieba支持动态调整已经加载的词典
有两种方法
1. 将新词加入词典
2. 调整词典中的某个词的词频
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
【六】关键词提取
jieba分词支持两种关键词提取算法:TF-IDF、TextRank。这两种算法会在后面的文章结合jieba源码进行分析。这里先看看如何使用。
1. 基于TF-IDF进行关键词提取
print(','.join(jieba.analyse.extract_tags(sentence,topK=2)))
结果如下:
天安门,北京
1.1 接口详解 extract_tags
extract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False)
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选
该接口用于基于TF-IDF提取关键词,可用于筛选指定词性的关键词,返回值可以带关键词的权重,也可以不带。
2. 依据TextRank算法进行关键词提取
print(','.join(jieba.analyse.textrank(sentence,topK=2)))
结果如下:
天安门,北京
2.1 接口详解 textrank
textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False):
- topK: return how many top keywords. `None` for all possible words.
- withWeight: if True, return a list of (word, weight);
if False, return a list of words.
- allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v'].
if the POS of w is not in this list, it will be filtered.
- withFlag: if True, return a list of pair(word, weight) like posseg.cut
if False, return a list of words
【七】词性标注
words =jieba.posseg.cut(sentence)
for word, flag in words:
print('%s %s' % (word, flag))
结果如下:
我 r
爱 v
北京 n
天安门 ns
总结:jieba提供的中文分词、词性标注、关键字提取等功能,使用简单,安装方便。其实现不仅有python版本,还有c++ java等版本,详情可以jieba官方链接:https://github.com/fxsjy/jieba