三、基于文本聚类的《红楼梦》风格分析
文本聚类是文本风格研究中的一种重要方法。它要求将文本集合分组成多个类,使得同一个类中的文本具有较高的相似性(文本间的距离尽可能小),而不同类中的文本内容差异较大(文本间的距离尽可能大)。通过文本聚类,可以很清楚地反映出不同类的文本在所选特征项上的总体差异。
本文中,我们使用欧氏距离计算不同文本间的距离:(11)
这里,m表示语料库中文本的数量。xik、xjk表示的是第i和第j个文本分别在第k维空间中的值。其计算的是在n维空间中任意两个文本a(xi1,xi2,…,xin)T,b(xj1,xj2,…,xjn)T之间的距离。
在进行聚类前,由于不同文本的语料规模大小具有差异,为使从语料中得到的数据具有统一性和可比性,需要对数据进行归一化处理。通过归一化处理,让数据在一个指定的范围内(如0~1之间),从而消除语料规模大小的影响,使聚类的结果更具合理性。
以下文中从前300个高频词的角度计算《红楼梦》第1~10回合并后的文本与第31~40回合并后的文本间的欧氏距离为例,其计算公式即为:
其中,i为第1~10回合并后的文本,j为第31~40回合并后的文本,k为前300个高频词,即k=1,2,…,300;xik、xjk分别为第k个词语在两个文本中归一化处理之后的值。
本文使用层次聚类与K-means两种聚类方法实现对文本中部分特征项的聚类。
(一)基于高频词的层次聚类
高频词是反映文本内容及作者用词习惯的一个重要语言特征。对《红楼梦》每十回的前三百个高频词的使用次数进行统计,对其进行归一化处理,然后使用层次聚类法对得到的结果进行聚类。
层次聚类,指聚类过程是按照一定层次进行的。其工作过程是:在聚类开始,将每个文本作为一类;然后计算每两类之间的距离,即文本与文本之间的相似性;接下来,寻找各类之间距离最小的两类,将其归为一类,并重新计算新生成的类与各旧类之间的距离;如此反复,直到所有的文本都归为一个大类。层次聚类不仅需要度量文本与文本之间的距离,还要度量类与类之间的距离。(12)距离的远近与文本的相似性是一种相反的关系,距离越远,说明二者的相似性越小;反之,距离越近,说明二者的相似性越大。
本文在使用欧氏距离计算出任意两个文本相似性的基础上,使用最大距离法来度量类与类之间的距离,即以两类文本之间的最大距离作为两类的距离。我们使用R语言中的hclust()函数来实现对文本的层次聚类,结果如图7所示。
图7 《红楼梦》中高频词使用情况聚类
图7中,横坐标为全部一百二十回,纵坐标为类与类之间的欧式距离,如第101~111回与第111~120回的欧式距离小于0.02,这两个文本聚成的小类与第81~90回和第91~100回所聚成的小类的欧式距离则远大于0.02,而前八十回与后四十回两个大类间的欧氏距离超过0.08。可以发现,在全部一百二十回中,第81~90回与第91~100回、第101~110回与第111~120回、第31~40回与第41~50回、第51~60回与第71~80回,以及前二十回之间的距离最近。前八十回与后四十回的距离相对非常远,可以清楚地分为两个部分;而前八十回内部,前四十回与中四十回混为一体。由此可以认为,从高频词的使用情况来看,前八十回与后四十回有很大不同。
事实上,前八十回与后四十回的前三百个高频词中,共有245个词是前八十回与后四十回均有的,但在使用次数上有较大的差异。
只出现在前八十回的另外55个高频词是:方、至、面、湘云、花、香、茶、罢了、皆、如此、或、不过、脸、半、尤氏、使、姥姥、忽、拉、媳妇、刘、生、替、晴雯、红、金、听说、笑道、如、依、贾珍、何、让、如何、薛蟠、毕、原来、众、周、当、诗、岂、今儿、以、其、亦、理、少、别人、秦、丫鬟、写、蓉、散。
只出现在后四十回的另外55个高频词是:么、紫鹃、心里、言、过来、问道、那些、外头、只是、那边、里头、人家、看见、站、回去、很、信、吓、定、府、书、但、肯、提、贾政、时候、连忙、必、安、办、像、明白、已经、怎么样、家里、不好、本、姐、女、弄、被、进去、到底、眼、哥哥、求、喜欢、主意、赶、语、急、亲、包、夜、宝蟾。
这些词语既反映了前八十回与后四十回作者在使用虚词上的差异:如前八十回中的方、罢了、皆、或、不过、使、忽、如、何、让、原来、当、岂、以、亦,后四十回的么、只是、很、定、但、必、已经、本、被;又在一定程度上表现了前八十回与后四十回内容上的差异:与前八十回中主要是描写贾府钟鸣鼎食的富足生活(花、茶、诗、金),有着众多的仆人(媳妇、丫鬟),贾府的人生活幸福满足(笑道)不同,后四十回则主要描写了贾府的没落(赶),贾赦、贾珍充军后,贾府众人一方面苦盼来信(信),而又对现状六神无主(主意)以及人人自危的窘境(吓、急、求)。与内容差异相对应的,便是出场人物的差异:在主要人物如贾宝玉、林黛玉、薛宝钗、王熙凤等贯穿整部小说之外,前八十回还重点描写了史湘云、尤氏、刘姥姥、晴雯、贾珍、薛蟠、秦可卿、秦钟以及贾蓉等人;而随着情节的发展,紫鹃作为林黛玉的侍女,在后四十回中尤其是林死后,作为林的代言人出场较多,宁国府被查抄后,贾政作为荣宁二府的当家人,自然也非常重要;宝蟾作为夏金桂的陪房丫头以及迫害香菱的帮凶,对后四十回情节发展起着一定作用。
(二)基于高频实词和全部虚词的k-means聚类
我们对第二部分比较过的十一种词类:实词中使用频率最高的名词(n)、动词(v)、形容词(a)、代词(r)、数词(m)、量词(q)以及全部虚词——副词(d)、介词(p)、连词(c)、助词(u)、语气词(y),在每十回中的使用次数进行归一化处理,对得到的结果进行k-means聚类。
k-means聚类是一种划分聚类。其基本思想是:首先从所有文本中任意选择k个文本作为聚类中心,其他文本则分配给与其距离最近的中心所代表的类;再将k类各自的中心(即此类中所有文本的均值)作为新的聚类中心,然后重新按照距离对文本进行分类。这样一直迭代下去,直到聚类中心不再改变为止。其最终目的是要实现类内文本之间相似性最大,而类与类之间的相似性最小。(13)
鉴于本文主要探究前八十回与后四十回的关系,故本文确定2个聚类中心。同时,采用欧氏距离计算文本与聚类中心之间的距离。我们使用R语言中的k-means()函数实现对文本的k-means聚类,得到的结果如图8所示。
图8中,圆圈与三角形分别代表《红楼梦》前八十回与后四十回,椭圆代表不同的类。可以看出,前八十回聚在同一个椭圆里,而后四十回则聚为另外一个椭圆中。二者并无混淆。同时可以发现,在前八十回内部,各样本间的距离要比后四十回内部各样本间距离小。由此,可以断定,从所选取的11种词类的整体使用上来看,《红楼梦》的前八十回与后四十回并不一致。
图8 《红楼梦》高频实词和全部虚词整体使用情况聚类