Anders Wang


我所认识的每个人都是榜样,都有值得我去尊敬和学习的地方。


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

最近的文章

用wordcloud和jieba生成中文词云

WordCloud是Python中一个非常优秀的第三方词云展示库,但是处理中文就不怎么能胜任,因为中文通常包含着一整句话,尽管在WordCloud里虽然也有process_text()方法用于把很长的…

Python, 技术博文详细阅读
更早的文章

Python之WordCloud词云库

WordCloud(词云)是Python中一个非常优秀的第三方词云展示库,WordCloud以词语为基本单位,根据你给出的字符串,对词频进行统计,然后以不同的大小显示出来。说的直接点就是它可以更加直观…

Python, 技术博文详细阅读
comments powered by Disqus