第二讲三国人物出场频次分析(一)

三国人物出场频次分析

案例需求:《三国演义》这本小说(约64万字)是大家耳熟能详的一部经典小说,我们都知道在作者罗贯中的笔中一直都视蜀汉为正统,那么真的是这样吗,今天我们通过对其中人物的出场频次进行分析;看看谁才是作者心中的“主角”。

实现思路,利用分词工具进行分词然后进行词频统计

jieba分词

由于中文文本中的单词不是通过空格或者标点符号分割的,我们要使用分词工具进行分词,jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性:

特点

  • 支持 3 种分词模式:精确模式、全模式、搜索引擎模式
  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

算法

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

安装

pip install jieba

主要函数列表

  • jieba.cut
# 1
# jieba.cut 精确模式 将字符串分割成等量的中文
# jieba.cut生成的是一个生成器,generator,
# 也就是可以通过for循环来取里面的每一个词
seg_list = jieba.cut("我来到北京清华大学")
print(seg_list)
# 
for seg in seg_list:
    print(seg)
# 我
# 来到
# 北京
# 清华大学
seg_list = jieba.cut("我来到北京清华大学")
print("使用join: " + "/ ".join(seg_list))
# 使用join: 我/ 来到/ 北京/ 清华大学
  • jieba.lcut
# 2
# jieba.lcut返回类型列表类型
seg_list = jieba.lcut("我来到北京清华大学")
print(seg_list)
# ['我', '来到', '北京', '清华大学']
  • 是否采用全模式
# 3.
# cut_all 参数用来控制是否采用全模式;即将字符串的所有分词可能均列举出来 冗余性最大 默认是精确模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式
# Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

seg_list = jieba.lcut("我来到北京清华大学", cut_all=True)
print("lcut全模式: ", seg_list)
# lcut全模式:  ['我', '来到', '北京', '清华', '清华大学', '华大', '大学']

  • 搜索引擎模式
# 4
# 搜索引擎模式,首先执行精确模式,然后在对其中长词进一步切分获得最终结果
# 该模式更倾向于寻找短词语,这种方式具有一定的冗余度,但是比全模式要少
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))

小结 如何选型:

  • 如果希望对文本分词准确,不产生冗余 ----》 精确模式
  • 如果希望对文本分词更为准确,不漏掉任何分词的 可能结果 -----》全模式
  • 如果没想好怎么用,可以使用搜索引擎模式

你可能感兴趣的:(第二讲三国人物出场频次分析(一))