红楼梦的作者是谁

简介:

红楼梦的作者是谁?

开谈不说《红楼梦》,读尽诗书也枉然。一曲红楼多少梦,情天情海幻情深。

春梦随云散,飞花逐水流
寄言众儿女,何必觅闲愁

我们国内的红学研究界一直以来也在为谁是红楼梦的作者争论不已。每个人的论点不一,各有各个的论点与论据。其中比较靠谱的有两种说法,一种是红楼梦全书为曹雪芹所著,另一种说法是红楼梦前八十回为曹雪芹著,后四十回为程伟元与高鹗著。
但追究根源,目前没有一种说法是十全十美、毫无瑕疵的,仅目前,红学界公认的普遍观点是《红楼梦》的原作者是曹雪芹,高鄂只是续写者。
《红楼梦》第一回正文中提到,此书经“曹雪芹于悼红轩中披阅十载,增删五次,纂成目录,分出章回”。
然由于早期抄本中脂批透露作批者与曹雪芹及其家族关系紧密,也熟知甚至部分地参与了《红楼梦》的创作,因此脂批可以说是曹雪芹作为《红楼梦》作者的最直接证据,但有些派别认为脂批纯属后来者杜撰,不能作为研究证据。
而在这些证明《红楼梦》作者的方法中,有一种是比较新颖的,就是统计小说的用词频率,即一般人写作总有自己的风格、习惯用语。所以有人通过对比《红楼梦》前八十回与后四十回的用词频率,看是否相同,词频类似于文章的指纹。
 
无独有偶,1983年到1987年,贝尔实验室的Jon Bentley发表了写有趣的系列专栏《Programming Pearls》,Jon在专栏中提出了一个问题:
(写一个程序,找出n个出现最频繁的单词,并在输出结果中显示这些单词出现的次数,最后按次数排序)。
很多人花费了大量的时间解决该问题,但花费的时间与程序效率尚需考虑,同时贝尔实验室的Doug McIlroy提供了一个6步解决方案,
几分钟就可完成编写,效率相当之高,该程序使用Shell脚本编写,以下为脚本全文。

 
  1. #! /bin/sh 
  2. # Read a text stream on standard input, and output a list of 
  3. # the n (default: 25) most frequently occurring words and 
  4. # their frequency counts, in order of descending counts, on 
  5. # standard output. 
  6. # Usage: 
  7. #   wf [n] 
  8.  
  9. tr -cs A-Za-z\' '\n' |            Replace nonletters with newlines 
  10.    tr A-Z a-z |                   Map uppercase to lowercase 
  11.       sort |                      Sort the words in ascending order 
  12.          uniq -c |                Eliminate duplicates, showing their counts 
  13.             sort -k1,1nr -k2 |    Sort by descending count, and then by ascending word 
  14.                sed ${1:-25}q      Print only the first n (default: 25) lines

脚本说明:
第一步tr  -cs  A-Za-z\'  '\n'    的作用将文档中的非字母转换为换行符,这里'被认为是字符,因为英文中有I'm这样的单词。这步完成后原文将变以一行一个单词的形式显示出来;
第二步tr  A-Z  a-z               的作用将文档的大写字符全部转换为小写字符;
第三步sort                       对处理后的文档排序;
第四步uniq  -c                   去除重复的单词且显示单词出现的个数;
第五步sort   -k1,1nr  -k2        按第一列排序(按词频排序),n表示以数字格式排序,r表示求倒序,如果第一列的词频相同则按后面的单词继续排序;
第六步sed  ${1:-25}q             显示前25行,q表示看完25后退出sed程序。


但以上脚本并不适合于中文文档的处理,因为英文单词与单词之间总是存在空格,这样脚本第一步才可以将整篇文档处理为一行一个单词继而通过排序
求词频,这是前提。但中文我们知道汉字与汉字之间是不存在空格的,所以我将以上脚本改写了一下,用以处理中文:

 
  1. #!/bin/bash 
  2. for i in {1..80} 
  3. do 
  4.     cut -c$i $1 >>one.txt 
  5.     cut -c$i $2 >>two.txt 
  6. done 
  7. grep "[[:alnum:]]" one.txt > onebak.txt 
  8. grep "[[:alnum:]]" two.txt > twobak.txt 
  9. sort onebak.txt |uniq -c |sort -k1,1n -k2,2n |tail  -30 > oneresult 
  10. sort twobak.txt |uniq -c |sort -k1,1n -k2,2n |tail  -30 > tworesult 
  11. rm -rf one.txt  two.txt  onebak.txt  twobak.txt 
  12. vimdiff   oneresult   tworesult 

脚本说明:
第一步通过循环分别取出两个文件的80列(一般屏幕显示字符为80个字符)字符,将文档变为一行一个汉字输出至one.txt与two.txt;
第二步由于有些行可能不会80个汉字,则通过grep去除空白行,并导出文档;
第三步通过sort对汉字排序、取出重复行,显示词频,在通过sort按词频排序,这样通篇文档所有汉字的词频都将显示,tail的目的为显示词频最高的30个汉字;
第四步通过diff对比两个文档的词频文件。


运行结果如下:

注意事项:

由于是处理中文文档,所以需要将文档编码保存为UTF-8编码,以上脚本在CentOS5.5中运行正常。

结论:
通过以上运行结果的统计信息可以看出,《红楼梦》前八十回使用最多的30个汉字与后四十回使用最多的30个汉字有很大的重叠性与类似性。足可以从一个侧面证明《红楼梦》全书确是出自同一人之手。
程伟元在120回本《红楼梦序》中说,后40回中有20余回是他自“藏书家甚至故纸堆”中找到,剩余10数回则得之于“鼓担”,他和高鹗只是“细加厘剔,截长补短”。
从这一记录层面上也可说明,就算后四十回不是作者亲自编排,那么也应该是高鹗等人根据原稿编录而成后四十回,
所以红楼梦前八十回与后四十回语言用词的词频未改,而风格有所变化。

满纸荒唐言,一把辛酸泪!
都云作者痴,谁解其中味?

假作真时真亦假,无为有处有还无。



















本文转自丁丁历险51CTO博客,原文链接:http://blog.51cto.com/manual/939415 ,如需转载请自行联系原作者



相关文章
|
2月前
|
Java Go Windows
新年快乐,我们一起GOGOGO!
手把手教你Go安装与环境配置(附第一个 Go 程序)
20 0
DHL
|
存储 算法 安全
LinkedList 落幕了吗?作者自己都不用
近期,看到网上有小伙伴们在讨论 LinkedList 作者自己都不用 LinkedList,我特意从网上搜索了一下,结果真让我找到了。
DHL
150 0
LinkedList 落幕了吗?作者自己都不用
源代码下载 作者:王先荣(Xianrong Wang)
作者:王先荣(Xianrong Wang) 下面是我的一些源代码: 1. 图像处理学习系列源代码——包括该系列文章的几乎所有代码; 1.5. 图像处理学习系列中用到的dll文件包——将这个解压缩之后放到Debug或者Release目录中; 2. OpenCV2.1的新特征; 3. 直方图; 4. 非参数背景生成; 5. 特征检测; 6.RANSAC示例。
866 0
新年快乐 ~
2018, 收获良多,感慨良多 感谢所有遇见和美好 感谢所有陪伴和信任 2019,新年,还, 携手并肩,再渡江湖 新年快乐 祝大家新年快乐
869 0
[唐诗]189长相思-李白
长相思-李白 长相思,在长安。 络纬秋啼金井阑, 微霜凄凄簟色寒。 孤灯不明思欲绝, 卷帷望月空长叹。 美人如花隔云端。 上有青冥之高天, 下有渌水之波澜。 天长路远魂飞苦, 梦魂不到关山难。 长相思,摧心肝。
1143 0
[唐诗]187春思-李白
春思-李白 燕草如碧丝, 秦桑低绿枝。 当君怀归日, 是妾断肠时。 春风不相识, 何事入罗帏?
743 0
[唐诗]184丁都护歌-李白
丁都护歌-李白 云阳上征去, 两岸饶商贾。 吴牛喘月时, 拖船一何苦。 水浊不可饮, 壶浆半成土。 一唱都护歌, 心摧泪如雨。 万人系磐石, 无由达江浒。 君看石芒砀, 掩泪悲千古。
935 0