《红楼梦》人物统计

1. 读取各种txt文件

# 读取《红楼梦》
txt = open('Dream_of_the_Red_Mansion.txt', 'r', encoding='utf-8').read()
# 读取红楼梦中的人物
names = open('Red_Mansion_Dictionary.txt', 'r', encoding='utf-8').read().split('\n')
# 将红楼梦人名添加到词库
jieba.load_userdict("Red_Mansion_Dictionary.txt")
# 读取废话词库
path_list = ["cn_stopwords.txt", "baidu_stopwords.txt", "hit_stopwords.txt", "scu_stopwords.txt"]
filter_words = []
for file in path_list:
	with open(f"stopwords-master/{file}", "r", encoding="utf-8") as fp:
		filter_words.extend(fp.read().split("\n"))
	fp.close()

2. 分词及初步筛选

# 对txt分词
words = jieba.lcut(txt)

# 进行初步筛选
words = [word for word in words if word not in filter_words]

3. 对人物多个称谓的进行合并处理1

# 对每个单词计数,并保存到字典类型counts中
counts = {}
for word in words:
	# 删掉无意义的单字
	if len(word) == 1:
		continue
	elif word in '贾母-老太太'.split('-'):
		word = '贾母'
	elif word in '贾珍-尤氏'.split('-'):
		word = '贾珍'
	elif word in '贾蓉-秦可卿'.split('-'):
		word = '贾蓉'
	elif word in '贾赦-邢夫人'.split('-'):
		word = '贾赦'
	elif word in '贾政-王夫人'.split('-'):
		word = '贾政'
	elif word in '袭人-蕊珠'.split('-'):
		word = '袭人'
	elif word in '贾琏-王熙凤'.split('-'):
		word = '贾琏'
	elif word in '紫鹃-鹦哥'.split('-'):
		word = '紫鹃'
	elif word in '翠缕-缕儿'.split('-'):
		word = '翠缕'
	elif word in '香菱-甄英莲'.split('-'):
		word = '香菱'
	elif word in '豆官-豆童'.split('-'):
		word = '豆官'
	elif word in '薛蝌-邢岫烟'.split('-'):
		word = '薛蝌'
	elif word in '薛蟠-夏金桂'.split('-'):
		word = '薛蟠'
	elif word in '贾宝玉-宝玉'.split('-'):
		word = '贾宝玉'
	elif word in '林黛玉-林姑娘-黛玉'.split('-'):
		word = '林黛玉'
	if word not in names:
		continue
	counts[word] = counts.get(word, 0) + 1

4. 对结果排序,输出出场频次前20的人名及次数

# 按照单词出现的次数从高到低排序。
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)

# 为了增强排序后结果的可读性,利用format调整输出的格式
# 输出出场频次前20的人名及次数
for i in range(20):
	word, count = items[i]
	print("{0:<10}{1:>5}".format(word, count))

完结,如果对你有帮助,欢迎点赞、收藏、关注!


  1. 此处的任务多称谓合并借鉴于简书作者Miku丨无形 ↩︎

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文通过对文本人物关系、文本结构分层、作者行文风格的分析来分析中文文本。 针对问题一,我们运用聚类分析和层次分析建立模型从物理结构与逻辑结构两方面来分析文本,我们提取文本中和文本标题中的人名作为特征项,用matlab编程分别统计每个人名在各个段落中的频数。通过运用主成分分析法对文本进行的分析我们得出自变量与常数项几乎不相关,因此不需要采取主成分回归分析。通过系统聚类分析,我们得到了聚类图,从中得出了主演人物之间的关系。通过层次划分,我们将样本一划分为两层,样本二划分为两层,样本三划分为两层。最后通过matlab编程统计样本中虚词的频数,并且分别对样本中虚词总体和各个虚词进行统计,运用计算风格学理论,我们得出前八十回与后四十回作者的行文风格存在差异。 针对问题二,我们对聚类分析、层次划分、行文风格进行了检验。对于聚类分析的结果,我们与从对文本概述的文学概括分析得到的人物关系进行比较检验,验证了聚类分析结果是可靠性。对于层次分析,我们通过用Excel对数据做出折线图,对图形进行分析,得出与用层次分析算法得出的相同的人物关系结论。 针对问题三,我们计算了各个样本中主要人物的比重,做出了折线图,从图中我们得出了文本结构一致性的结论,体现了三个样本的相同性。通过计算同一个人物在不同样本中的频数(以黛玉为例),我们得出各个样本由于主题思想的不同主要人物也有差异。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值