前言
很多人都听说过《红楼梦》的后四十回并非曹雪芹所著。本文就是用关联规则挖掘的方法,验证红楼梦后四十回与前八十回之间的用词差异。

基本概念定义
关联:自然界中某种事物发生时,其他事物也会发生,则称这种联系为关联。反映事件之间依赖或者关联的知识称之为关联型知识。(又称为依赖关系)
关联的类型:简单关联、时序关联、因果关联
关联规则挖掘:在交易数据,关系数据、或其他信息载体中,查找存在于项目集合或者对象集合之间的频繁模式、关联、相关性或者因果结构。

数据:即任务相关的数据,是事务的集合。
事务:是项的集合,且每个事务均具有事务标识符TID。
项集:Items,包含k个项的项集称为k-项集。如二项集{X1,X2}
支持度计数:Support,一个项集出现的次数,就是整个数据集中包含该项集的事务数。
置信度:Confidence,是包含A的事务中同时又包含B的百分比,条件概率。
频繁项集:若一个项集的支持度大于等于某个阈值,则称此项集为频繁项集。
强关联规则:同时满足用户定义最小支持度的阈值、和最小置信度阈值的关联规则。
兴趣度:描述了项集A对项集B的影响力大小,即A、B的相关程度。

研究方法
将红楼梦分为三个部分,1-40回、40-80回、80-120回。

首先,对每一个部分进行文本数据挖掘,寻找到它们之间的关联规则,也就是作者的用语习惯,量化关联规则,将每一个关联规则的置信度标识出来,以便进行比较。
然后,寻找相同的关联规则,在三个部分之间的差异,比较80-120回与前两部分之间的差异是否显著高于1-40回、40-120回之间的差异。

研究结论
定义1-40回与80-120回之间的差异为:

同理,定义1-40回&40-80回、40-80回&80-120回之间的差异。

运行结果如下


可以看出,1-40回与40-80回之间的关联规则比较相近,而二者与80-120回之间的关联规则差异比较大。不过需要指出的是,有人或许认为这与章节内容也有一定相关性,但是本文研究的均是强关联规则,也就是频繁使用的搭配,应该已经基本脱离了文章内容,均为一些古白话文的常见搭配,没有名词之间的搭配。
从强关联规则来看,《红楼梦》后40回与前两部分的差异明显增加,因此,从数据挖掘的角度来看,《红楼梦》后40回的用语习惯的确发生了较大的变化

代码如下:

#关联规则挖掘,Brute-force算法
#目前只计算出了频繁项集,还没有判断其关联规则
import pandas as pd
import jieba
from itertools import combinationsdef data():df = []with open(r"C:\Users\Administrator\coding\relationship\80-120.txt", "r", encoding = "utf-8") as f:for line in f.readlines():df.append(jieba.lcut(line.strip("\n")))items = []for i in df:items += ireturn df, list(set(items))#分词处理后,获得数据,储存在df中,进一步进行研究
#计算频繁项集
def frequency(df, items):freq = {"items":[], "prob":[]}for i in items:if items in ["'", '"', "’", "”", "“", "’", "。", ",", "!", " ", ":", "  ", " "]:continuecount_i = 0for j in df:if i in j:count_i += 1if count_i / len(df) >= 0.01:freq["items"].append(i)freq["prob"].append(count_i / len(df))return freq#计算支持度, freq为频繁项集
def support(df, freq):#先对频繁项集进行排列组合, 再计算其频繁项集的概率support = {"items":[], "prob":[]}for i in freq:i = list(i)#count_i用于记录i出现的次数count_i = 0for j in df:if i[0] in j and i[1] in j:count_i += 1#print(count_i, len(df), i, count_i / len(df))support["prob"].append(count_i / len(df))support["items"].append(i)return support#计算置信度
def confidence(df, support):#以第二个关键字作为条件relationship = {"items": [], "prob": []}for i in support["items"]:i = eval(i)if "," in i or "。" in i or "," in i:continuecount_i = 0count_cond = 0for j in df:if i[0] in j and i[1] in j:count_i += 1if i[1] in j:count_cond += 1relationship["items"].append(i)x = count_i / count_condrelationship["prob"].append(x)return relationshipif __name__ == "__main__":df, items = data()#计算频繁项集,并输入到文件sort.txt#frequency = frequency(df, items)#df = pd.DataFrame(frequency)#df.to_csv("sort.txt", index = False)#对两两组合的频繁项集计算支持度frequency = pd.read_csv(r"C:\Users\Administrator\coding\relationship\sort.txt")frequency = frequency["items"].to_list()freq = list(combinations(frequency, 2))print(len(freq), len(frequency))support = support(df, freq)support = pd.DataFrame(support)support.to_csv("support.txt")#将支持度的阈值设置为1%,计算在此情况下满足支持度的集合support = pd.read_csv(r"C:\Users\Administrator\coding\relationship\support.txt")support = support[support.prob>=0.01]support.to_csv("support_0.01.txt", index = False)#计算置信度support = pd.read_csv(r"C:\Users\Administrator\coding\relationship\support_0.01.txt")confidence = pd.DataFrame(confidence(df, support))confidence.to_csv("confidence.txt", index = False)#将置信度的阈值设置为10%,计算在此情况下满足的关联规则#confidence = pd.read_csv("confidence.txt")confidence = confidence[confidence["prob"]>=0.1]confidence.to_csv("confidence_0.1.txt", index = False)

未来可能的改进
计算关联规则之间的兴趣度,判断其是否有实际价值。

《红楼梦》后四十回真假辨析——数据挖掘之关联规则挖掘相关推荐

  1. [机器学习] --- 红楼梦后四十回到底是谁写的?机器学习分析法

    流传到今天的<红楼梦>共有120回,很多人认为是曹雪芹写了前八十回,后四十回是高鹗续写.后来随着新材料的发现,红学界经过慎重考察,认为后四十回并不是高鹗所写,高鹗和程伟元只是整理出版了&l ...

  2. python红楼梦作者_用 Python 分析《红楼梦》,后四十回是曹雪芹所写吗?(开源)...

    原标题:用 Python 分析<红楼梦>,后四十回是曹雪芹所写吗?(开源)

  3. python词频统计之红楼梦_用 Python 分析《红楼梦》,后四十回是曹雪芹所写

    用 Python 分析<红楼梦>,后四十回是曹雪芹所写 2020年11月04日 16:03:11    作者:九九文章网 处理后的效果是这个样子: #甄士隐梦幻识通灵#贾雨村风尘怀闺秀#此 ...

  4. 用人工智能判断红楼梦后40回是否是曹雪芹写的

    本博文主要是用机器学习的方法判断红楼梦后四十回是不是曹雪芹写的 开发语言: Python3.6 开发工具: numpy,matplatlib,sklearn 相关算法: SVM 先放上预测结果,再慢慢 ...

  5. python分析红楼梦中人物形象_红楼梦中四个人物形象分析

    1 贾宝玉人物分析 通过认真品读石头记, 我认为把贾宝玉作以上评价是不客观. 不合实际的, 是有悖于曹雪芹 本意的. 在我看来, 贾宝玉是一个充满爱心的, 敢于向森严的封建等级制度挑战的革命英雄, 这 ...

  6. 谈谈红楼梦(第44回)

    今天来谈谈红楼梦的第44回.第44回是第43回的延续,还是借给王熙凤过生日来延续着整个故事情节.然而第44回却刻画了几个经典的画面,大家从本回题目就可以看出:<变生不测凤姐泼醋 喜出望外平儿理妆 ...

  7. [机器学习]---如何用机器学习来判定红楼梦后40回是否曹雪芹所写

    前言 看到用机器学习方法分析红楼梦的文章不少,也有好几种方法,大观是因为纯文字的分析成本低吧,比较适合初学者练手,先转载一两篇文章过来学习.所谓机器学习也是一些数学统计的方法,通过习惯用词来做判断, ...

  8. python红楼梦绘制词云形状图_python数据挖掘实战笔记——文本挖掘(5):词云美化之绘制《红楼梦》词云图...

    词云图的美化就是把词云图的背景和颜色进行美化,以<红楼梦>词云图为例,如下所示: 首先绘制词云,跟之前的代码操作一样: import jieba import numpy import c ...

  9. [机器学习]如何用机器学习来判定红楼梦后40回是否曹雪芹所写

    前言 今天在涉机器学习相关知识时,看到黎晨这篇文章,觉得蛮有意思的,拿来这里介绍大家.这里判定的维度越多越精准,下面判定仅供参考,仅供娱乐学习! #判定整体思路 主要从以下几个方面可以进行粗略进行判定 ...

最新文章

  1. 如何学习linux编程(转载)
  2. SpringBoot 源码解析——SpringBoot 中的日志基础服务
  3. ****** 五十 ******、软设笔记【UML分析和意义】-类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图,动静态模式...
  4. OpenGL ES之Swift使用GLSL语言渲染图片的显示
  5. Python第三方包-你了解numpy吗(numpy进阶)
  6. java----DBUtils知识点补充
  7. Ubuntu如何卸载安装的软件以FileZilla为例
  8. 面试官:能说说Redis的持久化机制吗?
  9. 深入理解synchronized关键字
  10. django 1.8 官方文档翻译: 3-1-3 Django 的快捷函数
  11. mysql 提高恢复速度_如何有效地提高 MySQL 的备份和恢复速度?
  12. MAPREDUCER学习笔记
  13. 《软件工程》团队第一阶段Sprint检查表
  14. 漫画:什么是堆排序?
  15. RTI_DDS自定义插件开发 3 发送方
  16. \t\tP2P终结者原理
  17. 2014 BAT 面试经验 自律用~
  18. Android App压力测试
  19. pip 查看某个包有哪些版本
  20. (byte)0xaa 0xff

热门文章

  1. 从源码全面解析 dubbo 服务端服务调用的来龙去脉
  2. 深入理解图注意力机制
  3. 用MATLAB修改图像大小
  4. 如何将桌面文件夹移到计算机,如何将大文件快速拷贝/复制/分享到另一台电脑?...
  5. 硅片缺陷检测解决方案检测系统
  6. np.tile()函数的作用
  7. 计算机论文图片大小,对一副大小为256*256的bmp格式256色的灰度图象进行霍夫曼和字典编码压缩处理...
  8. Springboot 关于jsp报 Path with WEB-INF or META-INF: [WEB-INF/jsp/index.jsp] 错误总结
  9. 笔记:摄像头工作原理和色彩空间简介
  10. eclipse如何做java游戏,:#急需基于eclipse的JAVA小游戏源代码!!!#-南开游戏网...