用Python讀紅樓
最近受到這篇文章用Python讀金庸武俠的啟發(fā)。作為古典文(zhuang)學(xué)(bi)青年打却,一定要用Python來(lái)試試我讀了20年的《紅樓夢(mèng)》。
首先從網(wǎng)上找到了紅樓夢(mèng).txt(不清楚版本接癌,可能是程甲版)和對(duì)應(yīng)的人物表应媚。
把人名加入詞庫(kù),然后用結(jié)巴分詞切分整個(gè)文章(我沒(méi)有區(qū)分前八十回和后四十回)鲁冯,加入gensim的訓(xùn)練中
def tranning():
with open('hlm.txt') as f:
data = [line.strip()
for line in f.readlines()
if line.strip()]
sentences = []
for line in data:
words = list(jieba.cut(line))
sentences.append(words)
model = gensim.models.Word2Vec(sentences,
size=100,
window=5,
min_count=5,
workers=4)
return model
訓(xùn)練生成一個(gè)以詞向量表示詞的模型拷沸,下面就用代碼來(lái)找找和寶釵相似的人物吧。
for k, s in model.most_similar(positive=["寶釵"]):
print('{}:{}'.format(k, s))
探春:0.9595787525177002
紫鵑:0.9429049491882324
黛玉:0.9325058460235596
林黛玉:0.9230709075927734
李紈:0.9200501441955566
湘云:0.9067497253417969
襲人:0.9052997827529907
薛姨媽:0.9024999737739563
賈璉:0.899409294128418
寶玉:0.8973875045776367
電腦認(rèn)為探春和寶釵的相似度最高薯演,回想起第五十六回《敏探春興利除宿弊 賢寶釵小惠全大體》撞芍,都是治家的好手,算是有點(diǎn)道理跨扮。
但是這個(gè)第二相似的是紫鵑序无,為什么不是襲人?看來(lái)還是沒(méi)讀懂衡创?
第三名是黛玉帝嗡,這個(gè)不奇怪,所謂“釵黛一體”璃氢,紅學(xué)家論述很多哟玷。(這里說(shuō)明一下,因?yàn)槟壳斑€沒(méi)法把黛玉和林黛玉這兩個(gè)名字合為一個(gè)人一也,可能結(jié)果有些偏差)
下面用相似關(guān)系的來(lái)試試
find_relationship(model, '黛玉', '紫鵑', '寶玉')
給定“黛玉”與“紫鵑”碗降,“寶玉”和“平兒”有類似的關(guān)系
我本意是晴雯或者襲人吧,不過(guò)這里平兒亂入塘秦,是不是說(shuō)明了寶玉的一些小心思,呵呵动看,耐人尋味尊剔。
下面用K-Means算法,來(lái)聚類試試
類別1:
賈敬, 賈珠, 賈寶玉, 賈琮, 賈菌, 賈芹, 賈菖, 賈菱, 巧姐兒, 王子騰,
王仁, 王熙鳳, 薛寶釵, 林妹妹, 賈蓉之妻, 甄寶玉, 綺霰, 檀云, 茜雪, 春燕,
墜兒, 四兒, 佳蕙, 待書(shū), 入畫(huà), 彩屏, 翠墨, 蓮花兒, 珍珠, 玻璃,
翡翠, 小紅, 金釧, 玉釧, 彩霞, 素云, 翠縷, 寶珠, 小螺, 傻大姐,
焦大, 李貴, 鋤藥, 墨雨, 來(lái)旺, 隆兒, 昭兒, 喜兒, 王信, 齡官,
蕊官, 藕官, 寶官, 文官, 葵官, 空空道人, 甄士隱, 小童, 神瑛侍者, 警幻仙子,
賈雨村, 封肅, 冷子興, 林如海, 李嬤嬤, 門子, 馮淵, 拐子, 劉氏, 板兒,
青兒, 周瑞, 智能, 詹光, 吳新登, 秦業(yè), 金氏, 戴權(quán), 張材家的, 水溶,
凈虛, 趙嬤嬤, 程日興, 花自芳, 多渾蟲(chóng), 卜世仁, 倪二, 馬道婆, 周姨娘, 蔣玉菡,
云兒, 張道士, 傅試, 宋嬤嬤, 鮑二家的, 金文翔, 柳湘蓮, 賴尚榮, 邢岫煙, 李嬸娘,
李紋, 李綺, 胡君榮, 烏進(jìn)孝, 女先兒, 夏婆子, 柳家的, 佩鳳, 尤三姐, 尤老娘,
張華, 俞祿, 秋桐, 喜鸞, 王善保家的, 邢德全, 孫紹祖, 王一貼,
類別2:
黛玉, 寶釵, 賈政, 賈璉, 賈母, 寶玉, 王夫人, 鳳姐, 薛姨媽, 邢夫人,
尤氏, 李紈, 劉姥姥, 襲人, 晴雯, 麝月, 紫鵑, 鴛鴦, 平兒,
類別3:
賈赦, 賈珍, 賈環(huán), 賈瑞, 賈蓉, 賈蘭, 賈薔, 賈蕓, 史湘云, 薛蟠,
薛蝌, 林黛玉, 香菱, 妙玉, 趙姨娘, 秋紋, 司棋, 雪雁, 琥珀, 鶯兒,
豐兒, 彩云, 寶蟾, 茗煙, 焙茗, 興兒, 芳官, 周瑞家的, 秦鐘, 馮紫英,
賴大, 林之孝, 林之孝家的, 尤二姐,
看見(jiàn)類別2都是主角菱皆,類別3是配角须误,類別1就是跑龍?zhí)椎牧?/p>
再采用層級(jí)聚類的方式
得到如下的圖
這幅圖綠色的線都是主角,有些聚類比較準(zhǔn)確仇轻,比如賈政京痢、賈赦屬于兄弟倆。
藕官篷店、小紅祭椰、春燕臭家、墜兒都在丫頭的分類里面。
有些比較搞笑方淤,薛姨媽和李紈歸為一類钉赁,難道因?yàn)槎际枪褘D的緣故嗎(:-D)?
薛蟠和妙玉分在一類携茂,這是什么鬼你踩?難道預(yù)示了妙玉"無(wú)瑕白玉遭泥陷"的結(jié)局嗎?
以上就是我的分析, gensim都是初學(xué),就一個(gè)小時(shí)讳苦,一個(gè)新的紅學(xué)家就誕生了带膜,??
需要代碼的請(qǐng)看這里 (https://github.com/JoeCao/PythonHLM)
嚴(yán)肅的來(lái)說(shuō),因?yàn)榧t樓夢(mèng)屬于明清小說(shuō)鸳谜,行文有很多和現(xiàn)代文不一樣的地方膝藕,結(jié)巴分詞不能很好的切詞,導(dǎo)致學(xué)習(xí)效果比較差卿堂。
以上分析純屬逗樂(lè)束莫,不能當(dāng)真。