Python之jieba中文分词库

jieba是Python中最受欢迎的中文分词库,提供精确、全和搜索引擎三种模式,支持繁体分词及自定义词典。通过cut()方法进行分词,如示例中分析《三国演义》的高频词汇。除了基本功能,jieba还提供如TF-IDF算法的关键字提取等进阶操作。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值