Python利器之胎教《唐詩三百首》文本分析
事情是這樣的,你們聽我講:
有一天,孕媽媽在家庭群里對準爸爸說,在某貓上買本《唐詩三百首》吧,每天給寶寶讀一首唐詩,作為胎教。有圖有真相:
作為好吃懶做的准爸爸,聽到這個消息的瞬間,表情是這樣的:
准爸爸馬上在網上找資料,不料看到了一個相關問題:為何胎教要聽莫扎特,小朋友反而要聽兒歌呢?
2014年,美國權威的神經腦科學家約翰·梅迪納撰文稱,尚沒有任何科學證據表明莫扎特音樂對促進胎兒大腦發育有任何作用。約翰·梅迪納指出,子宮最大的好處是避免了各種刺激:黑暗、濕潤、溫暖、堅固、安靜的環境為胎兒早期大腦發展提供了最佳環境。
其中有一句直擊心靈:他對孕期胎教的建議是,請保持安靜,寶貝正在發育。
當準爸爸把這麼經典的結論分享給孕媽媽時,孕媽媽的一個眼神,把結論瞬間擊垮。
該讀的唐詩還是要讀,孕媽媽聽音樂、聽唐詩解讀開心了,心情舒緩,胎兒自然會受益。
你敢說不是嗎?(@^_^@)
那《唐詩三百首》到底在講什麼的?
《唐詩三百首》是一部流傳很廣的唐詩選集。唐朝(618年~907年)二百八十九年間,是中國詩歌發展的黃金時代,雲蒸霞蔚,名家輩出,唐詩數量多達五萬餘首。
在Github上找到一些古典中文的語料庫:rime-aca/corpus,作為本次分析的文本庫,對它進行詞頻分析。下圖是部分詩詞截圖:
利用「結巴分詞」庫對三百多首唐詩進行處理,「結巴」中文分片語件(fxsjy/jieba)支持三種分詞模式:
- 精確模式,試圖將句子最精確地切開,適合文本分析;
- 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
- 搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞。
本例採用精確模式:
# encoding=utf-8n# 導入所需的開發模塊nfrom wordcloud import WordCloud, STOPWORDS, ImageColorGeneratornimport matplotlib.pyplot as pltnimport jiebanimport jieba.posseg as psegnfrom PIL import Imagenimport numpy as npnnstopwords = []n# 中文分詞處理ndef processChinese(text): n seg_generator = jieba.cut(text)n seg_list = [i for i in seg_generator if i not in stopwords] # 排除stopwordsn seg_list = [i for i in seg_list if i != n] # 排除換行n seg_list = r .join(seg_list)n return seg_listnndef main():n # 讀取文本n text = open(poem.txt, encoding = utf-8).read()n # jieba分詞n text = processChinese(text)n # Generate a word cloud imagen fontpath =./msyh.ttfn wordcloud = WordCloud(font_path = fontpath,background_color = white,margin = 10, width = 1600, height = 900, max_words = 500, min_font_size = 20,max_font_size = 300, random_state = 42).generate(text)n # Display the generated image:n plt.imshow(wordcloud)n plt.axis("off")n plt.show()n
執行後,可得詞云:
300多首唐詩中,出現的高頻詞是:
?何處?、?萬里?、?不見?、?不知?、?昨夜?、?明月?、?將軍?、?不得?。
准爸爸突然一臉懵逼,這麼多不明確高頻詞,該如何跟寶寶講解。
准爸爸再次分析其中的「二字」、「三字」高頻詞:
「三字」高頻詞是:
?君不見?、?後庭花?、?黃鶴樓?、?行路難?、?二十年?、?何處尋?、?老江湖?、?鳳凰池?。
三百多首唐詩中,排名前20的作者分布如下,其中,詩仙李白、詩聖杜甫排名前二,人稱「大李杜」,「李商隱」和「杜牧」人稱「小李杜」。
天啊,原來唐朝的時候,就有人搞組合了,而且關係還不一般,李白與杜甫的友誼到底是怎樣的?網上竟然還有人爆出:
准爸爸該怎麼向寶寶解讀「大李杜」的關係呢...
嗯?呢!他們其實是好知己,直到李白寫了另外一首詩《贈汪倫》...
關係就變得更加錯綜複雜了...
300多首唐詩中,詩體分布如下:
五言律詩、七言律詩、七言絕句占前三。
絕句和律詩,是按照嚴格的格式和規則寫成的詩歌,字數、行數、句式、音韻都有嚴格的規定。律詩格律嚴格,篇有定句(每首八句),句有定字(五字或七字),字有定聲(平仄相對),聯有定對(中間兩聯對仗)。
詩歌具有音樂美,節奏感強,准爸爸向寶寶更應該傳達的是這種韻律,以及如何遣詞造句,創作詩詞歌賦。如果太過具化某首詩詞,講解某一個故事,或某一個小場景,翻譯後也就失去了那種韻味了。
如何進一步分析《唐詩三百首》呢?
我們以李白代表作之一《月下獨酌》為例:
讀過的朋友都知道,古詩中描寫了詩人在月夜花下獨酌,無人親近的冷落情景。詩人運用豐富的想像,表現出由孤獨到不孤獨,由不孤獨到孤獨,再由孤獨到不孤獨的一種複雜感情。
整體來看,是首悲情詩。
我們可以利用騰訊文智中文語義平台(騰訊文智中文語義平台-首頁)作進一步分析。
騰訊文智自然語言處理(Natural Language Processing)基於並行計算、分散式爬蟲系統,結合獨特的語義分析技術,一站滿足NLP、轉碼、抽取、數據抓取等需求。基於文智API可實現搜索、推薦、輿情、挖掘等功能。
我們在官網進行情感分析體驗:
經過對文本的分類分析:文本數據中有24.8%屬於美食(美酒也是美食吧),有24.8%屬於軍事;
情感分析結果中:87%是負面的情緒,李白的孤獨感油然而生;
關鍵字提取:對影、花間、獨酌。
我們直接接入API,接入方式參考API概覽 - 文智自然語言處理 - API文檔 - 幫助與文檔 - 騰訊云:
Python的接入方式,可訪問官網的樣例Python - 雲API SDK - 開發者資源 - 幫助與文檔 - 騰訊雲,或者對應的Github(QcloudApi/qcloudapi-sdk-python),目前支持Python2和3
$ pip3 install qcloudapi-sdk-pythonn
qcloudapi-sdk-python 是為了讓 Python 開發者能夠在自己的代碼里更快捷方便的使用騰訊雲的 API 而開發的 SDK 工具包。
#!/usr/bin/pythonn# -*- coding: utf-8 -*-n# 引入雲API入口模塊nfrom QcloudApi.qcloudapi import QcloudApinnmodule = wenzhin# 對應的介面ActionIDnaction = TextSentimentnnconfig = {n Region: gz,n secretId: ***yourSecretID***,n secretKey: ***yourSecretKey***,n method: post,n}nnparams = {n content: 花間一壺酒,獨酌無相親。舉杯邀明月,對影成三人。月既不解飲,影徒隨我身。暫伴月將影,行樂須及春。我歌月徘徊,我舞影零亂。醒時同交歡,醉後各分散。永結無情游,相期貌雲漢。,n type: 4,n}nntry:n service = QcloudApi(module, config)n # 生成請求的URL,不發起請求n print(service.generateUrl(action, params))n # 調用介面,發起請求n print(service.call(action, params))nexcept Exception as e:n import tracebackn print(traceback.format_exc():n%s % traceback.format_exc())n
從service.call方法的返回結果,即可得分析結果。
通過文智平台,我們可對文本數據做多方面的解讀。
寫了這麼多,孕媽媽終於發話了:
這篇沒有過千贊,老老實實過來念唐詩!!!
看完點個讚唄!
參考:
Python中文分片語件:結巴分詞fxsjy/jieba
Python詞雲生成器:amueller/word_cloud
騰訊文智中文語義平台:騰訊文智中文語義平台-首頁
文智:簡介 - 文智自然語言處理 - API文檔 - 幫助與文檔 - 騰訊雲
推薦閱讀:
※python寫的軟體都可以被逆向嗎?
※跟黃哥學習Python第一章
※使用Celery
※Python小工具: 發個周報郵件給老闆