红楼梦人物出场次数统计

 

这个也是学习过程中的一个成果吧,希望大家能批评指正。

红楼梦人物出场次数统计。亮点在于,考虑了人物的别称,以及有较为丰富的排除词库。如凤姐的称谓就有许多,凤辣子,凤姐,王熙凤等等,还有黛玉,有林黛玉,林妹妹,林丫头等等。很多人如果不把这些考虑在内,就容易导致错误的结果。

不得不说,宝玉是绝对的主角。人们通常认为黛玉是第二主角,宝黛恋是全文的绝对主线。结果出场次数最多的除了宝玉,却是贾母、凤姐和王夫人。接下来才是黛玉。挺吃惊的,不是吗?

标题

下面上代码:

这个也是学习过程中的一个成果吧,希望大家能批评指正。

#CalDreamsV1.py
import jieba
txt = open("Dreams.txt", "r", encoding="utf-8").read()
excludes = {"什么", "一个", "我们", "那里", "如今", "你们", "说道", "知道", "起来", "这里", \
                          "出来","姑娘","他们","众人","奶奶","自己","一面","只见","两个", \
                          "怎么","不是","不知","这个","听见","这样","进来","咱们","告诉","就是" ,\
                          "东西","回来","大家","没有","只是","这样","进来","咱们","告诉","就是"  }
words = jieba.lcut(txt)
counts = {}
for word in words:
       if len(word) == 1:
              continue
       elif word == "老太太" or word == "太太" or word == "老祖宗" or word == "史太君":
              rword = "贾母"
       elif word == "老爷":
              rword = "贾政"
       elif word == "宝二爷":
              rword = "宝玉"
       elif word == "王熙凤" or word == "熙凤" or word == "凤辣子":
              rword = "凤姐"
       elif word == "林黛玉" or word == "潇湘妃子" or word == "林丫头" or word == "林妹妹":
              rword = "黛玉"
       elif word == "宝姑娘" or word == "宝丫头" or word == "蘅芜君" or word == "宝姐姐":
              rword = "宝钗"
       else:
              rword = word
       counts[rword] = counts.get(rword, 0) + 1

for word in excludes :
       del counts[word]
items = list(counts.items())
items.sort(key = lambda x:x[1], reverse=True)
print("《红楼梦》人物出场次数")
for i in range(10):
       word , count = items[i]
       print("{0:<10}{1:>5}".format(word, count))
       

 

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
红楼梦的文本可以通过网络或者本地文件获取,我们可以使用 Python 中的 jieba 库进行中文分词,然后统计每个人物在文本中出现次数,最终生成一个出场次数的排名表和一个人物出场次数的词云。 以下是代码示例: ```python import jieba from collections import defaultdict from wordcloud import WordCloud import matplotlib.pyplot as plt # 读取红楼梦文本 with open('hongloumeng.txt', 'r', encoding='utf-8') as f: text = f.read() # 中文分词 words = jieba.cut(text) # 统计人物出现次数 counts = defaultdict(int) for word in words: if len(word) > 1: # 过滤掉单个字的词 counts[word] += 1 # 输出出场次数排名前十的人物 top_counts = sorted(counts.items(), key=lambda x:x[1], reverse=True)[:10] for i, (name, count) in enumerate(top_counts): print(f'{i+1}. {name}: {count}次') # 生成人物出场次数词云 wc = WordCloud(font_path='msyh.ttc', background_color='white') wc.generate_from_frequencies(counts) plt.imshow(wc) plt.axis('off') plt.show() ``` 这里我们使用了 Python 中的 defaultdict 来统计词频,这样就不需要事先对每个人物进行初始化,避免了出现 KeyError 的情况。同时,我们也过滤掉了单个字的词,以提高统计的准确性。 在生成词云时,我们使用了 WordCloud 库,并指定了字体和背景色。最终通过 matplotlib 显示出来。 需要注意的是,红楼梦的文本文件需要事先准备好,放在代码所在目录下,命名为 `hongloumeng.txt`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值