红楼梦人物词频统计

import jieba as j
import xlwt  # Excel库
import pandas as pd  # pandas库
import matplotlib as mpl  # matplotlib库由各种可视化类构成
from wordcloud import WordCloud  # 词云
import matplotlib.pyplot as plt  # matplotlib.pyplot是绘制各类可视化图形的命令字库,相当于快捷方式

# 建立一个保存主要人物名称的列表names
names = ['贾母', '贾珍', '贾蓉', '贾赦', '贾政', '袭人', '王熙凤', '紫鹃', '翠缕',
         '香菱', '豆官', '薛蝌', '薛蟠','贾宝玉', '林黛玉', '平儿', '薛宝钗', '晴雯', '甄费', '林之孝']
# 打开红楼梦txt文档,并赋予读的权限
txt = open('红楼梦.txt', 'r', encoding='utf-8').read()
# 用应用jieba包中的lcut()方法进行分词,将分词结果保存在变量words中
words = j.lcut(txt)
# 设置字典counts用以保存人物出场的次数。
counts = {}
# 设置多分支条件,目的是将一个人物的不同称谓或别号所出现的次数归为这个人物的出场次数
for word in words:
    if len(word) == 1:
        continue
    elif word in ["老太太", "老祖宗", "史太君", "贾母"]:
        word = "贾母"
    elif word in ["贾珍", '珍哥儿', '大哥哥']:
        word = "贾珍"
    elif word in ["老爷", '贾政']:
        word = "贾政"
    elif word in ["宝二爷", '宝玉', '贾宝玉']:
        word = "贾宝玉"
    elif word in ["王熙凤", "熙凤", "凤辣子", "贾琏"]:
        word = "王熙凤"
    elif word in ['紫鹃', '鹦哥']:
        word = '紫鹃'
    elif word in ['翠缕', '缕儿']:
        word = '翠缕'
    elif word in ['香菱', '甄英莲']:
        word = '香菱'
    elif word in ['豆官', '豆童']:
        word = '豆官'
    elif word in ["林黛玉", "潇湘妃子", "林丫头", "林妹妹", "黛玉"]:
        word = "林黛玉"
    elif word in ["薛宝钗", "宝姑娘", "宝丫头", "蘅芜君", "宝姐姐", '宝钗']:
        word = "薛宝钗"
    elif word in ["甄费", '甄士隐']:
        word = "甄费"
    # 进行人物的词频统计,这里只会统计保存在names列表里的人物名称的出场次数,可以自行添加需要统计出场次数的人物名称。
    # counts[word]设置了字典的键,如果word在names人物名称列表中,则其在counts字典中的值加1
    if word in names:
        counts[word] = counts.get(word, 0) + 1
# 将字典counts的键值对转化成列表并保存在变量items当中
items = list(counts.items()) # 此时items变成了一个二维数据
# 建立一个保存循环结果的列表word_key


items.sort(key=lambda x: x[1], reverse=True) # 进行出场次数的排序,reverse=True指定降序排序
# 打开一个空文本,赋予写入权限,字符类型为utf-8
with open('红楼梦_词频.txt', mode='w', encoding='utf-8') as fw:
    # 对人物出场次数进行格式化
    for i in range(len(items)):
        word, count = items[i]
        word_key = ('{0:<3}{1:>5}'.format(word, count))
        # print(word_key) # 此时结果可打印出来
        # 写入到空文本中
        fw.write(word_key + '\n')
# 关闭写入的文本
fw.close()

执行结果

贾宝玉 3886
贾母  2290
林黛玉  948
贾政   889
薛宝钗  707
王熙凤  689
平儿   592
袭人   584
晴雯   338
紫鹃   286
贾珍   280
香菱   258
薛蟠   194
贾赦   183
贾蓉   143
林之孝  143
翠缕    48
甄费    11
豆官     3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

君子如兰呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值