劉衛(wèi)國,李 晨
(中南大學 信息科學與工程學院,湖南 長沙 410083)
Python語言不僅語法優(yōu)雅、清晰、簡潔,而且具有大量的第三方函數(shù)模塊庫,很適合作為程序設(shè)計入門語言,對學科交叉應用也很有幫助[1-2]。
NLTK模塊是Python常用的自然語言處理(Natural Language Process,NLP)工具,能方便快捷地處理自然語言文本。NLTK模塊中有用于處理自然語言任務的函數(shù),與Python其他第三方模塊庫進行協(xié)同操作,能對處理結(jié)果進行二次處理。此外,NLTK包含豐富的語料庫,這些語料資源在教育學、文學、史學等領(lǐng)域均有應用[3]。
在管理、英語、法學等文科類專業(yè)程序設(shè)計教學中,利用NLTK模塊并結(jié)合其他第三方模塊,可以設(shè)計適合教學需要的應用案例[4]。在Python程序設(shè)計教學中,結(jié)合專業(yè)應用案例進行教學,能培養(yǎng)學生的學習興趣,引導學生將Python應用到專業(yè)領(lǐng)域中。
筆者以就職演說語料庫(Inaugural Address Corpus)作為英文研究對象進行分析,從中挖掘詞句結(jié)果及高頻詞,以此論證挖掘出來的結(jié)果與語料庫主題的相關(guān)性。就職演說語料庫包含1789—2009年美國歷任總統(tǒng)就職演講,共55個文本,總詞匯數(shù)為145 735個。語料庫以演說年代作為標準區(qū)分,演說年代對應獨立的子文本。本案例使用到的NLTK知識點包括語料庫的調(diào)用、分詞分塊處理、停用詞的信息過濾、頻率統(tǒng)計類函數(shù)的應用[5]以及NLTK與Matplotlib模塊的協(xié)同作用。案例流程見圖1。
圖1 就職演說語料庫案例流程圖
本案例使用的語料庫來源于NLTK的語料庫,導入NLTK模塊即可調(diào)用。使用NLTK計算文本長度的內(nèi)置函數(shù)len()計算詞匯豐富度T值。詞匯豐富度是用于分析文本中詞匯出現(xiàn)的多寡,反映文本詞匯的總體使用情況。就職演說語料庫的詞匯豐富度為6.692%,T值越大說明文本詞匯豐富度越大,對文本詞匯的使用情況得到數(shù)字上直觀的展示。
文本預處理是對文本進行簡單處理的過程,本案例的預處理過程包括清洗過濾與詞形還原。首先過濾文本中無實際含義的停用詞、符號,英文詞匯有單復數(shù)、時態(tài)等不同形態(tài),如果不進行詞形還原,統(tǒng)計結(jié)果會存在很大的偏差。
清洗過濾通過調(diào)用停用詞語料庫完成,首先將文本中詞匯使用lower()方法統(tǒng)一歸并為小寫,導入NLTK的英文停用詞語料庫,提取就職演說語料庫包含且停用詞語料庫不包含的詞匯。詞形還原通過編寫函數(shù)實現(xiàn)將復數(shù)單詞轉(zhuǎn)化為單數(shù),根據(jù)預先定義好單詞的單復數(shù)轉(zhuǎn)換規(guī)則,對輸入單詞的末尾字母作選擇判斷,將輸入的單詞末尾字母轉(zhuǎn)換為單數(shù)形式的后綴。使用到的知識點有判斷結(jié)構(gòu)if-else語句、詞匯運算符word.endswith()。具體代碼如下:
分析階段是抽取過程的核心,涉及文本的一系列處理操作。使用的方法有同語境詞提取、雙連詞提取、上下文提取、詞性標注以及統(tǒng)計分析,其中統(tǒng)計分析是最常使用的工具。
NLTK中使用函數(shù)similar()查找與目標詞匯出現(xiàn)在相似上下文位置的詞,即在文本中可用作替換的詞匯。在美國作家梅爾維爾所寫的《白鯨記》中尋找名詞的同語境詞,小說講述的是主人公亞哈船長與一頭白鯨的故事,使用text.similar("captain")找到以下同語境詞:whale ship sea boat deck world other devil wind body mate crew air head,可以發(fā)現(xiàn)得到的詞匯與目標詞匯詞性均為名詞。
雙連詞搭配提取是在文本中檢索得到頻繁出現(xiàn)的雙連詞以及文本中的固定搭配。例如在古騰堡語料庫中調(diào)用《哈姆雷特》提取雙連詞搭配,具體代碼如下:
NLTK有兩個方法可以實現(xiàn)目標詞匯的上下文輸出,使用concordance()對目標詞匯所在的句子進行檢索輸出,common_text查找詞匯集合的相同臨近詞匯,例如text2.common_contexts(["monstrous","very"])得到結(jié)果“a_pretty am_glad a_lucky is_pretty be_glad”,其中a_lucky表示a monstrous lucky與a very lucky。
詞性標注(Part-of-Speech Tagging, POS tagging)將分詞處理后的詞匯按詞性(POS)分類并標注的過程。在詞性分析階段使用NLTK內(nèi)置的詞性標注器(POS tagger),處理一個詞序列,為每個詞附加一個詞性標記。詞性標注可以幫助分析句子成分,劃分句子結(jié)構(gòu)。
概率統(tǒng)計作為NLTK中最常用的數(shù)學分析手段,用于文本中數(shù)據(jù)的處理分析。在Python中借助NLTK頻率分布類中定義的計算頻率的函數(shù),對文本出現(xiàn)的單詞、搭配、常用表達或符號進行統(tǒng)計詞頻、詞長等相關(guān)操作。代碼如下:
利用停用詞語料庫得到的高頻詞集,部分統(tǒng)計結(jié)果為[('government',593),('people', 563),('state s',329),('world',329)],括號內(nèi)數(shù)字為高頻詞在文本中出現(xiàn)的次數(shù)。
對語料庫雙連詞搭配提取:
nltk.Text(nltk.corpus.inaugural.words()).collocations()
部分結(jié)果如下:
United States; fellow citizens; American people。
對出現(xiàn)詞頻最高的詞匯“government”的同語境詞進行提取:
nltk.Text(nltk.corpus.inaugural.words()).similar("government")
部分結(jié)果如下:
people country union nation constitution power peace。
對高頻詞數(shù)據(jù)可視化,將結(jié)果轉(zhuǎn)化為詞頻折線統(tǒng)計圖、離散圖以及關(guān)鍵詞對比折線圖,分別見圖2—圖4。
圖2 頻率折線圖
圖3 離散圖
圖2折線圖是以高頻詞集作為數(shù)據(jù)來源進行可視化,橫軸為詞匯,縱軸為出現(xiàn)的次數(shù)。
圖3離散圖是用于展示詞匯在文本中出現(xiàn)的位置,發(fā)現(xiàn)“people”一詞在文本中出現(xiàn)密集而“democracy”則較稀疏,僅在后半部分出現(xiàn)較多。結(jié)合就職演說語料庫文本按時間順序排列的結(jié)構(gòu),可以看出不同演講用詞隨時間在使用頻率上顯著的差異。
圖4關(guān)鍵詞頻率折線圖是對不同年代美國總統(tǒng)在就職演講中使用“economy”“politics”兩個詞的頻率結(jié)果進行可視化輸出。可以看到“economy”一詞在“1925”“1958”兩個文本中達到峰值。
NLTK的主要適用場景是英文,在處理中文文本時需要安裝中文分詞工具包并進行字符轉(zhuǎn)換。本文選擇十九大報告作為中文分析素材,使用Jieba作為分詞處理工具[6]。本案例采用Beautiful Soup模塊對網(wǎng)頁上的案例文本進行爬取,Beautiful Soup是Python中用于網(wǎng)絡(luò)爬蟲的第三方模塊,它可以提供一些簡單的函數(shù)提取網(wǎng)頁中的內(nèi)容。
本案例將爬取后的文本內(nèi)容保存在TXT文件中,首先對爬取得到的素材文件過濾標點符號、數(shù)字與停用詞等,對全文內(nèi)容進行詞性標注。分析過程中使用同語境詞查找、關(guān)鍵詞所在句子輸出等方法,使用概率統(tǒng)計對高頻出現(xiàn)的詞匯進行查找輸出,最后導入Wordcloud模塊實現(xiàn)詞云可視化,展示統(tǒng)計分析結(jié)果。案例實現(xiàn)具體代碼如下:
將案例運行結(jié)果打印并可視化,得到十九大報告高頻詞折線圖、名詞高頻詞折線圖、離散圖、詞云展示結(jié)果見圖5—圖8。
圖5 十九大報告高頻詞折線圖
圖6 名詞高頻詞折線圖
圖7 離散圖
圖8 高頻詞詞云展示
從圖5中可以發(fā)現(xiàn)“發(fā)展”“中國”“人民”是報告中頻率最高的3個詞。在高頻詞中利用詞性標注結(jié)果篩選出名詞高頻詞,得到圖6名詞高頻詞折線圖,圖7離散圖用于展示目標詞匯在文本中所處位置,每一個豎線代表一個詞匯在十九大報告中出現(xiàn)的位置,從圖7中可以發(fā)現(xiàn)“人民”在報告中的各個位置均有分布,與其他詞匯相比出現(xiàn)位置最為密集。圖8選擇部分高頻詞匯以詞云的形式展示統(tǒng)計結(jié)果,增強了結(jié)果可視化的藝術(shù)性。
本文選擇中文、英文兩篇素材的分析進行教學案例設(shè)計,利用NLTK模塊和其他第三方模塊的一系列方法,從素材中提取詞句結(jié)果,完成有效信息查找與提取、統(tǒng)計分析以及詞頻可視化展示。教學案例結(jié)合文科類專業(yè)的特點,綜合運用Python程序設(shè)計方法和第三方模塊的功能,既體現(xiàn)了Python程序設(shè)計的特點和規(guī)律,又能更好地促進計算機在不同學科的交叉應用。文科類專業(yè)程序設(shè)計教學更需要直觀、具體的教學展示,利用案例組織教學,讓學生在邊學邊做中建立學習興趣,培養(yǎng)學習熱情,能獲得更好的教學效果。