
這是一個no zuo no die的經(jīng)歷。。。我,一個菜鳥編程初學(xué)者,經(jīng)過各種bug終于得出了結(jié)論。
一切都要從兩天前看的一篇文章說起。[告別金庸,我們整理了100件往事【浪潮工作室】
64、金庸對自己小說中的女性角色非常博愛,并且喜好飄忽不定。2004年,金庸在四川參加論壇時說,最喜歡的女性角色是《神雕俠侶》里的郭襄;2007年在北大演講時說,最喜歡的是《雪山飛狐》的程靈素;但金庸在《倚天屠龍記》后記中說,自己心中最愛小昭。
然后昨晚上自學(xué)python課程的時候剛好學(xué)到j(luò)ieba庫(中文分詞)的使用,課程案例是《三國演義》的人物出場次數(shù)統(tǒng)計以及英文小說《哈姆雷特》的詞頻統(tǒng)計。
一邊看mooc的我突然靈光一閃,這不是就是傳說中人物出場次數(shù)統(tǒng)計嗎?。。〔蛔邔こB返奈以趺纯梢苑治鍪裁慈龂萘x!我要分析金庸小說!全集!發(fā)現(xiàn)金庸的秘密!
我媽的愛豆王力宏!他不是有句歌詞!腦袋都是你!心里都是你!

最喜歡的當(dāng)然是出現(xiàn)最多的角色!?。≌媸翘珔柡α宋?!

于是乎。。。。。
苦逼的編程開始了。這里省去10000字。

對有可能看到這篇文章的編程大佬,我先貼上自己的代碼為敬。
#JinYong.py
import os
import jieba
num=15
bookpath=[]
def name(path):
? ? namelist=open(path,"r",encoding="utf-8").read()
? ? global names
? ? names=namelist.split()
? ? print(names[0:10])
? ? for name in names:
? ? ? ? jieba.add_word(name)
def getfilepath(path):
? ? a=os.listdir(path)
? ? global bookpath
? ? for i in a:
? ? ? ? bookpath.append(os.path.join(path,i))
name("D:\\name.txt")
getfilepath("D:\\books")
for i in bookpath:
? ? txt=open(i,"r",encoding="utf-8").read()
? ? words = jieba.lcut(txt)
? ? counts = {}
? ? p = {}
? ? for word in words:
? ? ? ? if word not in names:
? ? ? ? ? ? continue
? ? ? ? else:
? ? ? ? ? ? counts[word] = counts.get(word,0)+1
? ? ? ? ? ? p[word] =p.get(word,0)+ counts[word]/len(txt)
? ? print(i+"\n======================分詞完成======================")
items = list(p.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(100):
? ? word,p=items[i]
? ? print("{0:<10}{1:>.5%}".format(word,p))
不是編程大佬,看不懂?你只需要做出這種表情,這種姿勢:

簡而言之,利用python語言的第三方中文分詞庫jieba,我將金庸全部的15部小說文本逐一分解為一個個詞語,并利用計算機強大的計算速度和能力,對每個詞語進行詞頻統(tǒng)計。(還好金庸先生只寫了15部武俠小說就封筆了,要不然還不會爬蟲的我可能會猝死在下載小說的過程中)
由于金庸先生多年筆耕不輟,常年在《明報》上連載小說,碼了好多字。導(dǎo)致文本數(shù)據(jù)過大,每次運行程序都要好幾分鐘。
后來,我驚喜的發(fā)現(xiàn)網(wǎng)上有網(wǎng)友總結(jié)的金庸人名全集(感謝這個網(wǎng)友!不然我可能寫代碼寫到通宵。。。),并且將這個文本也同時進行了分詞,添加到我的jieba詞庫中,并建立了金庸人物姓名列表。
順便科普一波,由于金庸先生的小說廣受讀者好評,世界各地涌現(xiàn)出許多研究金庸小說的人,并將研究金庸小說的學(xué)問稱為“金學(xué)”。(ps:在我國,最著名的小說研究領(lǐng)域當(dāng)屬紅樓夢的“紅學(xué)”了)但金庸本人對“金學(xué)”并不感冒,覺得自己的小說沒什么好研究的。
機智的我,利用姓名庫對詞語進行了篩選,如果詞語不在金庸小說姓名列表中,就直接跳過這個詞語,不對它進行出現(xiàn)次數(shù)的統(tǒng)計。由此一來,程序只對金庸小說中出現(xiàn)的人名進行統(tǒng)計,此舉大大提高了程序運行的速度~~撒花?。?/p>

羅里吧嗦了那么多,所以金庸到底最喜歡哪個女主角???以下是金庸筆下出場頻率最多的前100名(因為每部小說長短不一,為了科學(xué)起見,我將頻率定義為【出場次數(shù)/小說全篇字?jǐn)?shù)】),由上至下分別是第1名至100名。



結(jié)果不言而喻,答案是金老先生最喜歡的女性角色是雙兒。
具體苦逼編程過程且聽下回分解~
現(xiàn)在是凌晨2:22
乏了乏了,碎覺去。
(本篇文章其實有很多不足的地方,比如jieba庫只能進行句子切分,而不能根據(jù)語義分析上下文,小說中很多代詞例如“她、他、他們”都無法進行精確的人物定位和出場次數(shù)統(tǒng)計,所以以上結(jié)果僅供參考。ps韋小寶的出場頻率為啥這么高?我懷疑程序出了一些我無法發(fā)現(xiàn)的bug= =如果有大佬發(fā)現(xiàn)歡迎指正。)
最后,寫這篇文章主要是想以不一樣的形式向金庸先生表示敬意。希望大家都能夠享受金庸的小說~~~。