【Python】 -- 使用jieba库实现对《三国演义》人物出场次数统计

需要借助一个中文词频分析工具--jieba库。

什么是jieba库

jiebaPython中一个重要的第三方中文分词函数库

通过指令pip install jieba 安装

使用:

>>>import jieba

>>>jieba.lcut("中国是一个伟大的国家")

['中国', '', '一个', '伟大', '', '国家']

jieba库解析

jieba库主要提供分词功能,可以辅助自定义分词词典。

例:

 


实现思路

主要思路

提取文本,将文本分成若干词组,将不需要的词组删除,遍历词组统计词组出现的次数。

具体步骤

  • 首先将文本读取并保存为字符串;
  • 使用jieba库的lcut函数将字符串分开返回词组列表;
  • 遍历词组列表计算词组出现次数将,词组及次数添加到字典中(同时需要考虑人物多称的情况)
  • 需要考虑jieba库会分开的是所有词语,而不是具体的人物名称,因此需要考虑将不需要的词组排除;
  • 将字典的键和值保存为列表,并按次数排序,最后输出。

代码实现

import jieba
excludes = {"将军","却说","荆州","二人","不可","不能","如此",
            "商议","如何","主公","军士","左右","军马","引兵",
            "次日","大喜","天下","东吴","于是","今日","不敢",
            "魏兵","陛下","一人","都督","人马","不知","汉中"}#此字典用于放需要排除的非人物词语
txt = open("三国演义.txt","r",encoding='utf-8').read();
words = jieba.lcut(txt) #使用jieba库对文本进行精确分词,返回列表类型
counts = {} #使用字典保存各人物的出场次数
for word in words:
    if len(word) == 1:#词长度为1的情况直接下一个词
        continue
    elif word == "诸葛亮" or word == "孔明曰":#修改文本中出现的人物名字,一个人物可能有多个别称
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word == "丞相":
        rword = "曹操"
    else:
        rword = word
    counts[rword] = counts.get(rword,0) + 1#将rword添加到字典中,如果不存在字典中则返回0,如果存在则在原值加1
for word in excludes:#遍历需要排除词语的字典,将其在word中删除
    del(counts[word])
items = list(counts.items())#将字典的元素和对应的值,转换为存放元组的列表,以便排序
items.sort(key = lambda x:x[1],reverse=True)#按照列表中元组的第二个元素(即次数)排序
for i in range(10):#输出场次数最多的前十名人物
    word,count = items[i]
    print("{0:<10}{1:>5}".format(word,count))

运行结果

 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四月天行健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值