Python微實踐 - 詩意書香,宋風(fēng)雅韻
? ? ? ? 詩意書香,宋風(fēng)雅韻,宋代的文人們或婉約,或豪放,為后世留下了不朽的文學(xué)遺產(chǎn) —— 宋詞。宋詞本質(zhì)上是用于合樂的歌詞,詞人在填詞時用的曲調(diào)名即為詞牌。各位讀者在中學(xué)時期一定對“水調(diào)歌頭”、“念奴嬌”這些詞牌名耳熟能詳。根據(jù)統(tǒng)計,存世的宋詞當(dāng)中出現(xiàn)的詞牌名約有1400余個。那么,哪些詞牌名最受詞人追捧?這種枯燥重復(fù)的統(tǒng)計工作,正是計算機所擅長的。
本文引用自作者編寫的下述圖書; 本文允許以個人學(xué)習(xí)、教學(xué)等目的引用、講授或轉(zhuǎn)載,但需要注明原作者"海洋餅干叔叔";本文不允許以紙質(zhì)及電子出版為目的進行抄摘或改編。
1.《Python編程基礎(chǔ)及應(yīng)用》,陳波,劉慧君,高等教育出版社。免費授課視頻
2.《Python編程基礎(chǔ)及應(yīng)用實驗教程》, 陳波,熊心志,張全和,劉慧君,趙恒軍, 高等教育出版社
3. 《簡明C及C++語言教程》,陳波,待出版書稿。免費授課視頻
? ? ? ?在隨書源代碼的CH6目錄下,有個名為songci.json的文件,該文件以JSON保存了21050首存世宋詞。關(guān)于何為JSON格式,以及如何存取JSON格式文件,我們在第8章中討論。
? ? ? ?在Visual Studio Code中打開文件songci.json,可見如下內(nèi)容:
? ? ? ?songci.json中的文本內(nèi)容如果按Python語法,可以理解為一個列表,該列表包含21050個字典。每個字典包含一首宋詞,其由至少三個鍵值對構(gòu)成,其中”author”對應(yīng)作者姓名,”paragraphs”對應(yīng)宋詞正文,”rhythmic”則對應(yīng)詞牌名。
??第2 ~ 4行:打開當(dāng)前工作路徑下的文件songci.json,將其中的內(nèi)容按字符串形式讀出,并借由eval()函數(shù)進行轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果賦值給ci。關(guān)于文件讀寫的詳細方法,我們在第8章里討論。根據(jù)songci.json的文件內(nèi)容可知,上述代碼執(zhí)行后,ci應(yīng)為一個列表,其中包含21050個字典。
??第6 ~ 9行:從宋詞列表ci統(tǒng)計各詞牌名的出現(xiàn)次數(shù),結(jié)果存儲于rhythmic字典中。第7行的for循環(huán)逐一遍歷列表ci中的子字典x,其中的值對象x[“rhythmic”]即為詞牌名r。對于每個遇到的詞牌名r,均將其在rhythmic字典中的出現(xiàn)次數(shù)加1。請讀者留意rhythmic.get(r,0)的應(yīng)用,當(dāng)某個詞牌名,比如”點絳唇”第一次被for循環(huán)發(fā)現(xiàn)時,其在rhythmic字典中尚不存在,get()函數(shù)的應(yīng)用可以避免程序出錯并返回指定的默認值0。
??第11 ~ 15行:使用第三方庫wordcloud生成詞云。Wordcloud第三方庫的安裝方法請參見1.6.3節(jié)。
??第12行:WordCloud是由第三方庫wordcloud所定義的類型名,其同名函數(shù)WordCloud()用于生成一個詞云對象。關(guān)鍵字參數(shù)font_path指明了生成詞云時所用的字體文件。對于Windows操作系統(tǒng)而言,這些字體文件可以在C:/Windows/Fonts目錄中找到。為方便讀者,作者復(fù)制了開源的阿里巴巴普惠體字體文件PUHUITI.ttf,并放置在了隨書代碼的CH6子目錄下。
??第14行:關(guān)鍵字參數(shù)background_color用于指定詞云的背景色,colormap則指定了顏色映射表。本行代碼中用到的顏色映射表”Paired”是由matplotlib定義的。
??第15行:詞云對象wc的generate_from_frequencies()成員函數(shù)進行已有的詞頻統(tǒng)計結(jié)果生成詞云。對本例而言,rhythmic字典提供了相應(yīng)的詞頻統(tǒng)計結(jié)果。那些出現(xiàn)次數(shù)多的詞牌名將在詞云中被突出顯示。
??第17 ~ 21行:在matplotlib里繪制圖云并顯示出來。
? ? ? ?運行上述程序songrhythm.py,將得到如圖所示的詞云。從中可以看出,在宋代,最受追捧的詞牌名是“浣溪沙”,然后是“水調(diào)歌頭”和“鷓鴣天”。

??操作技巧
? ? ? ?在運行songrhythm.py時,讀者一定要確保文件songrhythm.py、songci.json、PuHuiTi.ttf均位于當(dāng)前工作路徑之下。否則,程序會因為無法找到需要的文件而運行出錯。關(guān)于當(dāng)前工作路徑的解釋,請參見1.5.2節(jié)。
? ? ? ?將前述程序略作修改,便可以將統(tǒng)計對象由詞牌名改為作者。我們也根據(jù)存世作品的數(shù)量繪制了宋代詞人的詞云,如圖6-x所示。相應(yīng)代碼文件為songpoet.py,可在隨書代碼的CH6目錄下找到。如圖所見,宋代詞人存世作品最多的是辛棄疾,然后是蘇軾和劉辰翁。

源代碼,字體文件,宋詞json文件打包下載:?復(fù)制下述地址至瀏覽器下載
http://codelearn.club/2023/07/songci/songci/songci.zip
為了幫助更多的年輕朋友們學(xué)好編程,作者在B站上開了兩門免費的網(wǎng)課,一門零基礎(chǔ)講Python,一門零基礎(chǔ)C和C++一起學(xué),拿走不謝!


如果你覺得紙質(zhì)書看起來更順手,目前Python有兩本,C和C++在出版過程中。
《Python編程基礎(chǔ)及應(yīng)用》https://item.jd.com/12962124.html?

《Python編程基礎(chǔ)及應(yīng)用實驗教程》https://item.jd.com/13218563.html

