CWYAlpha

Just another WordPress.com site

Thought this was cool: 红楼梦文本折腾纪要

leave a comment »


虽然对红学一无所知,对文本挖掘只是“略懂”,但并不妨碍我们勇于折腾的生活方式。上周参加了第五届R会议,学到不少好东西,其中一个就是中文分词的工具。当然要找个对象来折腾一下啦。本次的黑手就伸向了被人蹂躏无数次的小说《红楼梦》。

折腾的思路基本上就是:1、将文本按章回划分。2、按章回获取某些统计量,看能否区别前八十回和后四十回。3、中文分词后以空间向量模型方法构造词条-文档关系矩阵。4、计算文档间距离后用多维标度方法降到二维展现120回的散点图形。

先从网上扒拉下一个纯文本的文档,也不知道什么版本。先用记事本打开后转成UTF8格式,然后在R中读入资料。此时的存储格式是list格式,list的每一个元素是文本中的一段。首先找出文本的章节划分点,然后计算出每一章节的段落数。下图即是这120回的段落数条形图,似乎在后四十回段落数量较少,而且趋于稳定,不如前八十回变化大。对二者作一个wilcox检验,证实了数量较少的显著性。同时用置换检验也证实了这一点。

除了段落,我们还可以观察不同章节的字数和句子数量。前者容易弄一些,后者是采用迂回的法子,去搜索文档中的几种标点,用标点数量来代表句子数量。先建立了一个搜索函数,然后分别搜索了句号、问号和感叹号的总数量。如下图所示,看起来没体现出什么模式。

进一步的,可以将每个章节的句子数量除以段落数量,得到平均的段落所包含的句子数量 。画成散点图,看起来后四十回的段落中句子数量较为一致,不象前八十回那么起伏变化。或许是写手为了仿照前文,文笔有些拘谨?

还可以查询每个章节中几位主角名字的出现频次,在这里是用相对频率来表现三位主角名字在每章节的出现比例。黛玉啊,100回之后就没怎么出来了。

下面我们再深入一步,用rmmseg4j包将文本进行分词,再用tm包构建语料库和词频矩阵。在最后生成词频矩阵时得到一个奇怪的结果,就是只获得了三个字以上词的矩阵,折腾许久也不知道是什么原因。就用这个结果,再用余弦距离来计算120回文本之间的疏离度,也就是距离。将这个距离矩阵用MDS降到二维来展现。从下图来看,前八十回和后四十回似乎分的比较清楚。呵呵,折腾完毕。

代码在此,原文本在此。欢迎大家来拍砖。

from 数据科学与R语言: http://xccds1977.blogspot.com/2012/06/blog-post.html

Written by cwyalpha

六月 2, 2012 在 11:09 上午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: