python红楼梦人物词频统计_通过数据挖掘能分析《红楼梦》各回的真伪吗?
可以的。小智最近就嘗試通過用機器學習的方法,分析了一下紅樓夢后四十回的真偽。
以下內容引自小智的微信公眾號,轉載需申請授權。
----------------------------------------------------------------------------------------------------------------------
說到《紅樓夢》后四十回的真偽
文學界各位大佬爭論了兩百多年,有共識,卻沒有定論
小智也想班門弄斧一下
試試從理科的角度破解這個糾纏兩個多世紀的懸案
一般來說,每一段語言、文字都或多或少帶著對應人物形象的烙印
比如聽到“我想死你們了”,大概知道是馮鞏來了
“抽煙喝酒燙頭”那是于謙老師的標配
甚至有時候,一個群體也會有著固定的口頭禪或者說話習慣
(?_?)圖文無關 (?_?)
基于這個理由,我們相信,如果紅樓夢前八十回與后四十回
由同一個作者書寫
那么,他的用詞習慣,行文風格必然是統一的
反之,如果用詞存在明顯差異,就證明后四十回存在偽造嫌疑
小智的大致思路是將紅樓夢120回通過統計方法轉換為向量,并打上是否為前八十回的標簽,之后從中抽取一小部分作為訓練集,剩下大部分為測試集。訓練集送入分類算法進行學習,然后用此算法放在測試集上檢驗,看效果如何,如果精度較高則表明前八十回和后四十回的寫作風格的確有所不同。
那么,選擇什么樣的特征來將紅樓夢文本轉化為向量?
常用的詞頻統計、χ方統計、互信息等方法肯定是不行的,因為前八十回和后四十回本來情節上就不同,涉及情節的詞詞頻肯定有所不同,例如,七十八回之前和之后相比,晴雯這個詞的出現頻率肯定有天壤之別。如果用這些方法選出來的詞作為特征,即使能將前八十回分出來也說明不了這是兩個不同人寫出來的。
因此,本文選擇了“之”、“其”、“亦”等五十多個文言虛詞,加上紅樓夢中在所有120回中均有出現的部分詞語共同組成特征值,這樣算下來一共有一百余個詞,采用這些詞的出現頻率來作為特征,最大程度地排除了情節的影響,某種程度上體現了寫作者的寫作風格。
接下來是分類算法的選擇,小智選擇了常用的SVM算法。閑話不多說,特征值選擇和算法確定了之后,接下來就是寫個小程序驗證一下這個想法。在這里,小智用的語言是Python 3.5。
具體操作分成四步進行:
一、引入模塊
開頭部分沒什么過多可以說的,就是引入需要的模塊,以scikit-learn的內容為主。HC這個模塊里面是小智自己寫的一些常用函數。
二、向量化
首先是讀取紅樓夢的文本,這個文本是在網上抓取的一個無脂批的紅樓夢120回版本,經過了一定預處理然后保存下來的文件。
之后調用了張華平博士開發的NLPIR漢語分詞系統,將所有文本進行分詞,然后收集成一個詞典。
下一步,將每一回均出現的詞加上五十余個文言虛詞合并起來,作為特征值。程序運行結果顯示最后作為特征值的詞有138個。
將文本向量化的時候使用了最簡單粗暴的詞頻統計方法,一開始也試過tf-idf等方法將文本向量化,但是運行之后發現在本次應用里其結果還沒有簡單的詞頻方法好。
三、分類算法
將120回隨機分成了兩部分,比例是0.8,也就是訓練集占20%,24回,剩下的96回作為測試集。由于是文本分類任務,就直接把SVM的核定為線性核,然后用gridsearch搜索一下參數C,得到一個最優化的參數。最后在測試集上驗證算法。
四、可視化
為了有個直觀一些的印象,將138維的文本向量壓縮成2維并畫出來,降維過程采用的是PCA的方法。
運行程序后,在測試集上得到了如下的驗證結果:
在驗證集上得到了0.95的平均f1值,效果還是不錯的。這也可以表明,前八十回和后四十回至少在寫作用詞習慣上是有所區別的,使用算法可以很清楚地區分開。光看f1值有些抽象,可以考慮將高維的文本向量降維,然后畫出來,雖然會損失很多信息,但是也可能有一些直觀的東西呈現出來。
將138維向量壓縮到2維之后得到的圖像如下:
其中藍色星形為前八十回,紅色十字為后四十回。可以看到,雖然經過了從138維到2維的劇烈壓縮,損失了大量信息,但是仍然可以發現前八十回和后四十回沒完全重合,分布有所區別。
依照如上方式,如果將紅樓夢分為三部分畫出來,可以得到:
其中綠色圓形為前四十回,藍色星形為四十一至八十回,紅色十字為后四十回。同理,可以發現前四十回與四十一至八十回分布基本上重合,也就是前八十回內部是比較均勻和相似的,而后四十回則是另一種分布。
本文用機器學習的方法選取了一個很小的方面來對紅樓夢前八十回和后四十回的區別做了些探究,算法并不復雜,結果還是比較明顯。由于用詞風格上存在明顯差異,我們有理由相信,《紅樓夢》后四十回,極有可能是他人假托曹雪芹之名的偽作!
想想紅學研究馬上又要多一顆冉冉升起的新星,
簡直是忍不住給自己點個 zan
Mu Hahaha~
總結
以上是生活随笔為你收集整理的python红楼梦人物词频统计_通过数据挖掘能分析《红楼梦》各回的真伪吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物联网毕设选题 - 单片机智能远程宠物喂
- 下一篇: ThinkSNS安装手记