Python之jieba中文分词库
jieba分词是Python中目前最受欢迎的中文分词库,他有许多特点,为了便于介绍直接引用官方介绍如下。
支持三种分词模式:
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
支持繁体分词
- 支持自定义词典
- MIT 授权协议
jieba分词的原理是利用一个中文词库,确定汉字之间的关联概率,然后组成词组,形成分词结果,除了分词,用户还可以添加自定义的词组。
我们先来看一个最简单的代码示例:
jieba使用起来非常简单,核心的功能函数方法就是使用cut()方法来做分词处理。当然不仅仅是这一个方法,还有诸多cut方法,比如lcut(),lcut返回的是一个list,而刚才的cut返回的是一个Python生成器。cut和lcut的区别除了返回的结果不一样以外,还有一个重要的区别是cut的速度要略快于lcut可以详见官方文档。
# encoding=utf-8
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list)) # 全模式
# 输出如下:
# 全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("默认(精确模式): " + "/ ".join(seg_list)) # 精确模式
# 输出如下:
# 默认(精确模式): 我/ 来到/ 北京/ 清华大学
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
# 输出如下:
# 他, 来到, 了, 网易, 杭研, 大厦
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
# 输出如下:
# 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
下面这个示例,就是我们使用jieba来分析《三国演义》小说中,两个字词汇频率最高的词是什么,可以从结果中发现,枭雄操和军事孔明果然是三国小说里提及最多的风云人物前二名。
import jieba
from pathlib import Path
from collections import Counter
text_path = Path(Path.cwd()/'三国演义.txt')
with text_path.open(encoding = 'GB18030') as f:
text_content = f.read()
# 添加自己的词库分词,比如添加'军师孔明'到jieba词库后,当你处理的文本中含有军师孔明这个词,
# 就会直接将'军师孔明'当作一个词,而不会得到'军师'或'孔明'这样的词。
jieba.add_word('军师孔明')
# 与cut方法区别的是返回的是list类型
words = jieba.lcut(text_content)
# 用Counter方法计算单词频率数
count = Counter(words)
most_count = count.most_common()
words_list = []
for i in most_count:
if len(i[0]) >= 2 and len(i[0]) <= 4:
words_list.append(i)
print(words_list[:10])
# 输出如下:
# [('曹操', 934),
# ('孔明', 831),
# ('将军', 760),
# ('却说', 647),
# ('玄德', 570),
# ('关公', 509),
# ('丞相', 488),
# ('二人', 463),
# ('不可', 435),
# ('荆州', 420)]
jieba虽然使用上十分简单,只需要调用一个核心函数就可以达到分词的效果,但还有更多细腻的参数操作,比如:我们可以自己设置关键字,然后用基于TF-IDF算法的analyse.extract_tags()方法提取关键字,或者自定义自己的词典库等等。
更详细的用法和更新动态详见:https://github.com/fxsjy/jieba