红楼梦的数据分析已经有许多人做过,结论也各不相同。
我在知乎上看到两篇帖子:

  1. 通过数据挖掘能分析《红楼梦》各回的真伪吗?
  2. 用机器学习判定红楼梦后40回是否曹雪芹所写
    觉得很有意思,于是用自己的方法重做了一次

配置
我主要使用的编程环境是Jupyter Notebook 4.2.1,因为可以调整每一个代码块,方便
纠错什么的。
然后我们得用到一个中文分词工具 - Jieba, 是由百度工程师Sun Junyi开发的
之后我们还得用到一些做机器学习/数据挖掘的标准包:numpy, matplotlib 和 sklearn

数据准备
用爬虫思想,我去这个网站扒下来红楼梦全集,然后剪掉中间所有的换行符,使得每一回只
占文档中的一行。这样的话,方便接下来读取。

直接上代码:
一、导入各种需要的包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*-coding:utf-8 -*-
import urllib
import urllib2
import re
from bs4 import BeautifulSoup as bs
book = []
for i in range(120):
print("处理第{}回...".format(i+1))
if i+1<10:
url = "http://www.purepen.com/hlm/00{}.htm".format(i+1)
elif i+1 < 100:
url = "http://www.purepen.com/hlm/0{}.htm".format(i+1)
else:
url = "http://www.purepen.com/hlm/{}.htm".format(i+1)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
bsObj = bs(response.read().decode('gb18030'))
chapter = bsObj.table.font.contents[0]
book.append(chapter)

直接上代码:
一、导入各种需要的包

1
2
3
4
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 因为后面会用到3d作图
import operator