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