聚类简单实现对《红楼梦》是否同一作者的分析(上)

第一次看到老师给的题目的时候,我就很怀疑:通过每个章回虚词出现的频率(频数),就能判别是否是同一作者?

大概出现的虚词:

cell=['之','其','或','亦','方','于','即','皆','因','仍','故','尚','乃','呀','吗','咧','罢咧','啊','罢','罢了','么','呢','了','的','着','一','不','把','让','向','往','是','在','别','好','可','便','就','但','越','再','更','比','很','偏','儿']

 

当然,首先考虑到:比如说“之”这个字,就有很多用法,1 助词 2动词 3代词,而动词是不属于虚词的,但是怎么判断文章中出现的”之“是不是虚词呢?好像得用到语义分析,但是某文智系统都不靠谱:

就算了吧,就简单实现一下对特定的这45个字(词)的每章回出现的频率(频数)进行统计就完事了。

先挖个坑,如果以后有时间的话,研究研究文本的特征挖掘,写个[下](估计是不太可能了)。

 

首先,读入txt文件。[该txt中一行代表一个段落]

file=open('redmansiondream.txt',encoding="ansi")
file_context=file.readlines()

 

这样就把txt中的信息存到列表file_context里了,每个内容代表一个段落中所有的文字。

其次,使用正则表达式分割file_context,本代码采用的是判断”第XXX回“出现的段号,即file_context中内容为"第XXX回"的下标,并把每回的开始段号和结束段号存储在二维数组中。

(ps:习惯了C和mat的for循环  python的for不太习惯 所以循环都是用的while)

t=0 #第t回
#提取每个章回的开始结束段号
while i<len(file_context):
    key=re.compile(u'第[\u4e00-\u9fa5]{0,6}回') #正则表达式查找字符串‘第X回’ 其中X长度为[0,6]
    pa=re.findall(key,file_context[i])
    if (len(pa)==1) & (file_context[i][0]=='第')& (len(file_context[i])<30):#因内容中有提及之前章回之嫌,判断字符串是否位于段首
        t=t+1
        index[t-1][0]=i#开始段号
        if t!=1:
            index[t-2][1]=i #结束段号
    i=i+1
index[119][1]=len(file_context)-2 #最后一回段号

 

这样,我们就得出了每一回的起始段号和结束段号,就相当于实现了”分割“。

之后,对于每一回,分别计算出45个指定的字出现的次数,并储存在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值