摘? 要:在“Python程序設(shè)計”課程中,字典的概念和應(yīng)用是一個難點。結(jié)合字典功能和jieba庫對“黨的二十大報告”進行詞頻分析,針對直接統(tǒng)計結(jié)果的不足,通過詞語替換改進程序達到了較好的效果,并利用Matplotlib庫對統(tǒng)計結(jié)果進行了直觀顯示。通過以上實際案例編程,有利于學(xué)生掌握字典的概念和應(yīng)用,以及統(tǒng)計結(jié)果的可視化。
關(guān)鍵詞:詞頻;字典;jieba庫;黨的二十大報告
中圖分類號:TP311? ? 文獻標(biāo)識碼:A? ? 文章編號:2096-4706(2023)18-0195-04
Word Frequency Analysis of“Report of the 20th National Congress of the Communist Party of China”Based on Dictionary and jieba Database
XIE Guangyi
(Intelligent Science and Information Engineering College, Xi'an Peihua University, Xi'an? 710125, China)
Abstract: In the course of“Python Programming”, the concept and application of dictionary is a difficult point. Combining the dictionary function and the jieba database, this paper analyzes the word frequency of the“Report of the 20th National Congress of the Communist Party of China”. Aiming at the shortcomings of the direct statistical results, it improves the program by word replacement to achieve better effect, and uses the Matplotlib database to visually display the statistical results. Through the above practical case programming, it is helpful for students to master the concept and application of dictionary and the visualization of statistical results.
Keywords: word frequency; dictionary; jieba library; Report of the 20th National Congress of the Communist Party of China
0? 引? 言
“重要的事情說三遍”,“說三遍”即為“重復(fù)或反復(fù)說三次”,體現(xiàn)了“重復(fù)”具有突出“重要性”的特點,同樣“多次重復(fù)出現(xiàn)”的詞匯能夠整合篇章信息、具有體現(xiàn)篇章主題的特點。詞頻分析就是對篇章中重要詞匯出現(xiàn)的次數(shù)進行統(tǒng)計與分析,是文本信息挖掘的重要手段。詞頻分析在政治、經(jīng)濟、文化、教育和體育等諸多領(lǐng)域[1-11]得到廣泛使用。趙世超[1]等通過“對多家鄉(xiāng)鎮(zhèn)衛(wèi)生院一百多名衛(wèi)生人員進行個人深入訪談,對訪談內(nèi)容進行編碼和詞頻分析,從他們對工作的態(tài)度、工作的積極性和是否離職三個方面入手,找到影響這些方面的主要因素”。孫照紅在其文章[2]中講述“詞頻分析法是研究黨的文獻的重要范式和方法”,并從詞頻視角分析《中共中央關(guān)于加強黨的政治建設(shè)的意見》文件。江文路在其文章[3]中論述“黨代會政治報告代表著黨內(nèi)高層所達成的政治共識,是黨的各種文件中篇幅最大、字?jǐn)?shù)最多、涉及內(nèi)容最為廣泛、說明論證最為充分的權(quán)威文件。通過對多次黨代會報告的詞頻分析,歸納出中國共產(chǎn)黨人民觀的演進邏輯與特征”。
2022年10月16日,習(xí)近平在中國共產(chǎn)黨第二十次全國代表大會上作了《高舉中國特色社會主義偉大旗幟為全面建設(shè)社會主義現(xiàn)代化國家而團結(jié)奮斗》的報告。其后不久,筆者在講授“Python程序設(shè)計”第六章“組合數(shù)據(jù)類型”中“字典”內(nèi)容時,適時利用字典概念和功能對“黨的二十大報告”進行詞頻分析及直觀顯示,引起了同學(xué)們濃厚的興趣,通過案例教學(xué)實現(xiàn)所學(xué)知識的靈活應(yīng)用。
1? Jieba分詞
Jieba庫是第三方優(yōu)秀的分詞庫。它利用一個已有中文詞庫,確定前后文中字符之間的相關(guān)概率。然后依據(jù)相關(guān)概率的大小組成詞組,從而形成分詞結(jié)果。它有三種分詞模式:全模式、精確模式和搜索引擎模式。全模式依照中文詞庫掃描出文本中所有可能的詞語,但是分詞結(jié)果中存在冗余。精確模式為精確的分割文本,分詞結(jié)果中不存在冗余單詞。搜索引擎模式是在精確模式基礎(chǔ)上,對長詞進行再次切分,分詞結(jié)果也存在冗余。因此本文利用Jieba庫的精確分詞功能,把“黨的二十大報告”切分為詞組的列表形式。例如“二十大報告”中的“現(xiàn)在,我代表第十九屆中央委員會向大會作報告?!边@句話使用jieba.lcut()命令精確分詞,就會得到['現(xiàn)在', ',', '我', '代表', '第十九屆', '中央委員會', '向', '大會', '作', '報告', '。']的結(jié)果。
2? 分詞統(tǒng)計
在Python中,字典是一系列鍵值對,采用大括號{}或dict()命令創(chuàng)建。每個鍵都與一個值相關(guān)聯(lián),鍵值對用冒號表示,可使用鍵來訪問相關(guān)聯(lián)的值。與鍵相關(guān)聯(lián)的值可以是數(shù)值、字符串、列表等。事實上字典類型是“映射”的體現(xiàn),它和Python中的序列類型相類似。序列類型由0…N間的整數(shù)作為數(shù)據(jù)的默認(rèn)索引,而字典映射類型則由用戶為數(shù)據(jù)定義索引。因為生活中映射無處不在,所以鍵值對無處不在。如果用字典類型統(tǒng)計“詞語”出現(xiàn)的次數(shù),此時“詞語”是鍵,次數(shù)是值。字典中定義許多內(nèi)置的函數(shù)和方法來完成如何創(chuàng)建、訪問、添加和刪除字典中的元素。假設(shè)給定字典對象d,這里給出詞頻分析要用到的字典函數(shù)和方法:1)d.get(k,
3? 詞頻分析
3.1? 創(chuàng)建“黨的二十大報告”文檔
在中華人民共和國中央人民政府網(wǎng)站首頁>新聞>滾動中打開《高舉中國特色社會主義偉大旗幟為全面建設(shè)社會主義現(xiàn)代化國家而團結(jié)奮斗》全文[12],利用CTR+V拷貝正文全部內(nèi)容,然后在Windows附件中打開“記事本”程序,使用CTR+C把粘貼板中的內(nèi)容全部粘貼到新建文檔中,并把文檔命名為“黨的二十大報告.txt”存儲到硬盤中。
3.2? 詞頻分析程序
詞頻分析的主要步驟如下:
1)輸入第三方j(luò)ieba庫。
2)打開并讀入“黨的二十大報告.txt”文檔。
3)用jieba的精確分詞功能把“黨的二十大報告”文本切分為列表words。
4)生成空字典counts,counts={ }。
5)利用字典的get()方法統(tǒng)計words中“詞組”出現(xiàn)的次數(shù),排除長度為1的單個漢字。
6)字典counts轉(zhuǎn)換為列表類型items,并利用列表的sort()排序功能。此時利用lambda函數(shù),以items中第二項即詞語出現(xiàn)的次數(shù)進行排序;reverse=“True”,即按降序排列。
7)打印出排序靠前的十五個詞組。
具體的程序如圖1所示。
3.3? 詞頻結(jié)果分析
從打印出的前十五個詞組(圖2(a))可以看到:“發(fā)展”出現(xiàn)218次、“堅持”出現(xiàn)170次、“人民”出現(xiàn)134次、“建設(shè)”出現(xiàn)150次、“中國”出現(xiàn)123次、“社會主義”出現(xiàn)114次、“全面”出現(xiàn)101次、“現(xiàn)代化”出現(xiàn)85次,這些高頻詞匯和“黨的二十大”大會主題“高舉中國特色社會主義偉大旗幟,全面貫徹新時代中國特色社會主義思想,弘揚偉大建黨精神,自信自強、守正創(chuàng)新,踔厲奮發(fā)、勇毅前行,為全面建設(shè)社會主義現(xiàn)代化國家、全面推進中華民族偉大復(fù)興而團結(jié)奮斗”是相一致的。
詞頻統(tǒng)計清晰地表明“黨的二十大報告”中的重點詞匯。然而統(tǒng)計的是“黨的二十大報告”,卻在高頻詞“前十五位”中未出現(xiàn)“中國共產(chǎn)黨”。經(jīng)過查詢,“中國共產(chǎn)黨”在詞頻統(tǒng)計中只出現(xiàn)27次,針對這個問題進行程序的優(yōu)化。
3.4? 程序的優(yōu)化
經(jīng)過對“黨的二十大報告”的分析得到,“中國共產(chǎn)黨”在報告中多次用到簡化的形式,大多都以“黨”來代表,因此需要改進原先詞頻統(tǒng)計程序。在原步驟5)中,改為首先判斷長度為1的分詞,如果此時為“黨”則計為“中國共產(chǎn)黨”,否則還是不進行統(tǒng)計。另一方面,如果是1個以上字符,“共產(chǎn)黨”“全黨”也都計為“中國共產(chǎn)黨”。經(jīng)過這樣的詞語替換,重新統(tǒng)計的結(jié)果如圖2(b)所示。這時可以發(fā)現(xiàn),“中國共產(chǎn)黨”在報告中總共出現(xiàn)了100次,排在第十一位,達到預(yù)期的結(jié)果。
另外,統(tǒng)計中“我們”這個詞是代詞,并不能突出報告的主題??梢圆扇∫韵碌姆椒ㄓ枰耘懦菏紫?,定義排除詞庫,即創(chuàng)建一個集合,如excludes={"我們"}。然后,利用循環(huán)語句刪除字典中以排除詞庫中的詞為key值的字典元素,具體語句為del(counts[word]),其中counts為字典類型,word為排除詞庫元素,相應(yīng)的程序如圖3所示,最后的詞頻統(tǒng)計輸出如圖2c所示。
4? 詞頻統(tǒng)計的顯示
為了讓詞頻統(tǒng)計的結(jié)果有一個更直觀和美觀的顯示,將采用彩色柱狀圖的方式進行輸出,利用Matplotlib庫進行繪圖。Matplotlib庫由各種可視化類構(gòu)成,內(nèi)部結(jié)構(gòu)復(fù)雜。受Matlab啟發(fā),Matplotlib.pyplot是繪制各類可視化圖形的命令子庫,相當(dāng)于快捷方式。詞頻統(tǒng)計輸出顯示要用到bar()方法繪制柱狀圖,text()方法結(jié)合zip() 函數(shù)進行數(shù)值標(biāo)注,主要說明如下:
1)Matplotlib.pyplot.bar()方法用于繪制柱狀圖。bar()方法的使用格式為:matplotlib.pyplot.bar (x, y, width,color, alpha, edgecolor, bottom, linewidth, tick_label, align)。其中x:指定x軸上數(shù)值;y:指定y軸上的數(shù)值;width:表示柱狀圖的寬度,取值在0~1之間,默認(rèn)為0.8;color:柱狀圖的填充色;alpha:柱狀圖的透明度;edgecolor:柱狀圖的邊框顏色;bottom:柱狀圖底部離橫軸的距離;linewidth:柱狀圖邊框?qū)挾?;tick_label:柱狀圖的刻度標(biāo)簽,也可直接將標(biāo)簽賦值給x;align:指定x軸上對齊方式,可選“center”“edge”。
2)text()作用是在制圖時給圖中的點加標(biāo)簽。plt.text(x,y,s,fontsize,verticalalignment,horizontalalignment,rotation,kwargs)。其中x,y:標(biāo)簽添加的位置,即注釋文本內(nèi)容所在位置的橫/縱坐標(biāo);s:標(biāo)簽的內(nèi)容,字符串格式;fontsize:加標(biāo)簽字體大小,取整數(shù);verticalalignment(va):垂直對齊方式,可選“center”“top”“bottom”等;horizontalalignment(ha):水平對齊方式,可以選“center”“l(fā)eft”等;rotation:標(biāo)簽的旋轉(zhuǎn)角度。
3)zip()函數(shù)能夠把可迭代的對象當(dāng)作參數(shù),把對象中相應(yīng)的元素打包成一個個元組。本程序中就是把前十五個詞語及相應(yīng)統(tǒng)計次數(shù)打包成一個個元組,如('發(fā)展',218,218)。
4)為了在輸出時有正確的中文顯示,需要加入plt.rcParams['font.family']='SimHei',plt.rcParams['font.size']=15,兩條語句讓圖中文字字體為標(biāo)準(zhǔn)黑體,字體大小為15。
詞頻統(tǒng)計顯示程序和顯示結(jié)果分別如圖4和5所示。
5? 結(jié)? 論
詞頻分析應(yīng)用領(lǐng)域十分廣泛,在Python中借助字典功能可以方便地實現(xiàn)文章的詞語頻率統(tǒng)計,對于進一步挖掘其中的含意提供了可能。對于中文文章的分詞需要借助于jieba模塊,它的精確分詞功能可以把文章分成沒有冗余“詞語”的列表形式,方便進行詞頻統(tǒng)計。由于漢語詞匯極其豐富,同樣的意思往往有不同的表達形式??梢允褂锰娲~語的方法對一個核心詞匯進行詞頻統(tǒng)計,如本文中“中國共產(chǎn)黨”簡寫為“黨”,“全黨”也是“中國共產(chǎn)黨”的另一種表達。字典的含意和其get()方法是進行詞頻統(tǒng)計的核心語句,對于初學(xué)者也是一個難點,但通過“黨的二十大報告”詞頻統(tǒng)計使其概念和get()方法顯得具體且明晰、便于理解掌握。為了達到更友好的統(tǒng)計展示效果,可使用Matplotlib顯示工具對前“十五位詞頻”詞語進行柱狀圖輸出,增強“詞語”間出現(xiàn)次數(shù)的對比顯示。通過對“黨的二十大報告”的高頻詞進行分析,使學(xué)習(xí)者對字典、jieba模塊和Matplotlib庫有了較好地掌握,同時對“黨的二十大報告”的內(nèi)容有了進一步的學(xué)習(xí)。
參考文獻:
[1] 趙世超,譚福金,王宇桐,等.鄉(xiāng)鎮(zhèn)衛(wèi)生院衛(wèi)生人員工作態(tài)度與激勵機制探析——基于訪談詞頻分析的實證研究 [J].中國衛(wèi)生政策研究,2019,12(10):29-35.
[2] 孫照紅.黨的政治建設(shè)的政治話語和建設(shè)重點——詞頻分析視角 [J].黨政研究,2020(1):65-74.
[3] 江文路,張小勁.中國共產(chǎn)黨人民觀的演進邏輯與特征——基于歷次黨代會報告的詞頻統(tǒng)計和語料分析 [J].社會主義研究,2019(5):63-73.
[4] 劉春杰.基于詞頻分析的語篇主體意愿研究——以俄羅斯總統(tǒng)和議員階層對金磚國家的意愿為個案 [J].中國俄語教學(xué),2021,40(3):1-12.
[5] 翟云秋,程晉寬.大學(xué)校長開學(xué)典禮致辭的教育價值——基于36所“世界一流大學(xué)”建設(shè)高校校長致辭的詞頻分析 [J].江蘇高教,2021(6):42-50.
[6] 宮承波,王偉鮮.制度自信與文化自信——基于詞頻分析的習(xí)近平關(guān)于新冠肺炎疫情系列重要講話精神解讀 [J].當(dāng)代傳播,2021(1):46-48+64.
[7] 魯芮汐,莫愁.中國角色在歐美電影中的形象變遷——基于詞頻統(tǒng)計的分析與思考 [J].浙江大學(xué)學(xué)報:人文社會科學(xué)版,2021,51(4):154-162.
[8] 陳雅薇,朱華晟,姚飛.長三角地區(qū)新冠肺炎疫情應(yīng)急與產(chǎn)業(yè)政策響應(yīng)——基于政策文本的詞頻分析 [J].現(xiàn)代城市研究,2021(1):45-51.
[9] 王道杰,劉力豪.國際奧委會改革理念的創(chuàng)新及其對北京冬奧會的啟示——基于《奧林匹克2020議程》的詞頻統(tǒng)計 [J].中國體育科技,2021,57(3):52-57+79.
[10] 陳幸歡.野生動物保護地方立法家長主義與趨同性省思——基于23部省級法規(guī)的詞頻與文本分析 [J].江西財經(jīng)大學(xué)學(xué)報,2020(6):138-147.
[11] 牟向前,王慶軍.基于詞頻分析的健身APP用戶體驗現(xiàn)狀及發(fā)展建議 [J].體育學(xué)刊,2020,27(2):64-68.
[12] 習(xí)近平.高舉中國特色社會主義偉大旗幟為全面建設(shè)社會主義現(xiàn)代化國家而團結(jié)奮斗——在中國共產(chǎn)黨第二十次全國代表大會上的報告 [EB/OL].[2023-01-24].http://www.gov.cn/xinwen/2022-10/25/content_5721685.htm.
[13] 嵩天,禮欣,黃天羽.Python語言程序設(shè)計基礎(chǔ):第2版 [M].北京:高等教育出版社,2017.
作者簡介:謝光藝(1973—),男,漢族,河南登封人,高級工程師,博士,主要研究方向:計算機網(wǎng)絡(luò)、深度學(xué)習(xí)。