未加星标

用机器学习的方法鉴别红楼梦作者

字体大小 | |
[商业智能 所属分类 商业智能 | 发布者 店小二05 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

在学界一般认为,《红楼梦》后 40 回并非曹雪芹所著。本文尝试应用机器学习的方法来分析原著文本中作者的用词习惯,从技术角度去说明《红楼梦》前 80 回和后 40 回的写作风格差别,继而可以确认后 40 回非原作者所写。


项目存放在 reality-of-Dream-of-Red-Mansions。


主要原理


每个作者写作都有自己的用词习惯和风格,即使是故意模仿也会留下很多痕迹。


在文言文中,文言虚词分布均匀,书中每个回目都会出现很多文言虚词,差别在于出现频率不同,我们把文言虚词的出现频率作为特征。


不只文言虚词,还有其他的词在所有回目中出现频率很多。比如对第 80 回进行词频统计,得到


了 172

的 142

我 70

宝玉 65

你 61

道 54

他 51

也 50

着 48

是 40

说 38


这些高频词汇也可以作为特征向量。


本文将 20~29 回(诗词曲比较均衡)作为类别 1 的学习样本,将 110~119 回作为类别 2 的学习样本。


将两个类别的特征向量输入到 SVM(支持向量机) 进行训练得出一个分类模型。再对剩余回目进行分类,看它们分别偏向于哪个类别。


SVM 相关原理参见 NG 的公开课 Machine Learning 和 scikit-learn 库


相关学术论文参见

施建军. (2011). 基于支持向量机技术的《 红楼梦》 作者研究. 红楼梦学刊, (5), 35-52.

李贤平. (1978).《红楼梦》成书新说. 复旦学报(社会科学版).


特征选取


['之', '其', '或', '亦', '方', '于', '即', '皆', '因', '仍',

'故', '尚', '呢', '了', '的', '着', '一', '不', '乃', '呀',

'吗', '咧', '啊', '把', '让', '向', '往', '是', '在', '越',

'再', '更', '比', '很', '偏', '别', '好', '可', '便', '就',

'但', '儿', # 42 个文言虚词

'又', '也', '都', '要', # 高频副词

'这', '那', '你', '我', '他' # 高频代词

'来', '去', '道', '笑', '说' #高频动词]


选取常用的 42 个文言虚词和通过词频统计得到的高频使用的词作为特征,分别计算它们在各个回目中出现的频率作为特征向量。


在源码中由 modelBuilder.py 中的 build_feature_vector 函数实现。


目录结构

.

├── README.md

├── textProcesser.py # 文本处理

├── modelBuilder.py # 模型建立

├── decisionMaker.py # 作出判断

├── neg_trainset.npy # 正例训练集

├── pos_trainset.npy # 负例训练集

├── trainset.npy # 训练集

├── testset.npy # 测试集

├── text

│ ├── redmansions.txt # 原著文本

│ ├── chapter-1 # 按章分开,第一章

│ ├── chapter-n

│ ├── chapter-words-1 # 第一章分词结果

│ ├── chapter-words-n

│ ├── chapter-wordcount-1 # 第一章词频统计结果

│ └── chapter-wordcount-n


使用步骤


运行 textProcesser.py,将原著文本分为章节,分词,词频统计

运行 modelBuilder.py,对文本章节提取特征向量,建立分类模型

运行 decisionMaker.py,对文本进行分类


结论


1~80

[ 1. 1. 1. 1. 1. 2. 2. 1. 1. 2.

2. 1. 1. 1. 1. 1. 1. 1. 1. 1.

1. 1. 1. 1. 1. 1. 1. 1. 1. 1.

1. 1. 1. 1. 1. 1. 1. 1. 1. 1.

1. 1. 1. 1. 1. 1. 1. 1. 1. 1.

1. 1. 1. 1. 1. 1. 1. 1. 1. 2.

2. 2. 1. 1. 1. 1. 1. 2. 1. 1.

1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]


81~120

[ 1. 1. 2. 1. 1. 2. 2. 1. 1. 2.

1. 2. 2. 2. 2. 2. 2. 1. 2. 2.

1. 2. 2. 2. 2. 2. 2. 1. 2. 2.

2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]


1 指该回目属于类别 1,2 指该回目属于类别 2。


可以得出结论

前 80 回属于一类,后 40 回属于一类

80 回左右是分界点

后 40 回风格不同于前 80 回


81~120 回中有一些被分成了 1 类,这与特征选取有关,还与使用的原著版本有关。这里的版本是网上下的电子版,版本不明,建议使用人民文学出版社 1982 年出版的《红楼梦》作为研究对象。


1~80 回有一些被分成了 2 类,可能是后 40 回作者在续写过程中对部分章节进行了修改。


参考:http://scikit-learn.org/stable/modules/svm.html#svm


欢迎加入本站公开兴趣群

商业智能与数据分析群

兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识

QQ群:418451831

tags: #160,py,chapter,回目,红楼梦,虚词,文言,词频,npy,向量,文本,类别,特征
分页:12
转载请注明
本文标题:用机器学习的方法鉴别红楼梦作者
本站链接:https://www.codesec.net/view/406172.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 商业智能 | 评论(0) | 阅读(385)