第一次看到老师给的题目的时候,我就很怀疑:通过每个章回虚词出现的频率(频数),就能判别是否是同一作者?
大概出现的虚词:
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个指定的字出现的次数,并储存在