云太真
對中文文本進行詞頻分析,進而生成詞云,是一種常見的文本分析方法。詞云分析有助于快速掌握文章主要內容,抓住重點,深入理解文章內涵,并以圖形化的方式進行展示。本文以國家發(fā)展改革委和國家能源局今年5月發(fā)布的《關于促進新時代新能源高質量發(fā)展的實施方案》一文為例,使用Python語言及其擴展包,對其進行詞頻分析,生成詞云。
首先是整理文件,從網上可以找到此文件的文本,復制整理為TXT格式,去掉無關內容,去掉注解和說明。我們分析的是文本正文,對其他內容不做研究。
接著,我們利用Python語言的文件操作,將文件讀入到字符串中,如下:
article=open(‘E:/關于促進新時代新能源高質量發(fā)展的實施方案.txt).read()
這條語句在執(zhí)行的時候會報告錯誤。經查,發(fā)現最近Windows10操作系統(tǒng)下的記事本程序進行了更新。使用記事本程序保存TXT文本的時候,它會默認保存為utf-8編碼格式。這說明微軟不再把ANSI編碼作為默認的編碼格式。因此代碼在打開文件的時候,需要指定編碼格式如下:
該語句執(zhí)行后,article是一個包含文件所有內容的字符串。
接下來,我們需要將這個連續(xù)的文本分割為詞匯,這樣才能進行詞頻分析。需要說明的是,漢語詞匯的分割是一個難題。首先來說,漢語的基本單位是字,字組成詞,詞和詞之間沒有明顯的標識。這一點不像英文文本,英語文本的詞是基本單位,詞和詞之間有空格分開,漢語文本的詞之間是連續(xù)的。其次,漢語的詞和詞也能組成詞、成語、歇后語等,這些語言現象的存在對詞匯的分割產生了很多困難。另外,不同學科的文本中往往還存在一些專業(yè)詞匯和術語,進行詞匯分割和識別需要對這些專業(yè)詞匯和術語進行處理。
為解決中文分詞的問題,不少研究者提出了一些有用的算法。在Python語言領域,有些研究者或機構發(fā)布了對應的擴展包給大家使用,有些適用于通用的社會科學文本,有些適用于某些專業(yè)領域的文本。這里我們使用最常用的結巴分詞擴展包,使用之前我們要先安裝。具體方法是:在聯網情況下,在操作系統(tǒng)的命令行下運行指令:
pip? install? jieba
然后在程序中首先導入jieba分詞包,即:
import jieba
接下來,我們這樣使用jieba分詞包。這條語句,將把文本字符串article分割為若干詞匯,并按順序,將詞匯作為列表的元素返回,article_words是一個列表。你可以試試觀察一下該列表的內容。
article_words=jieba.lcut(article)
分詞的目的是對文本中的詞匯進行頻度統(tǒng)計,這可以使用Python的字典類型,該字典的鍵就是文本中的詞,值就是該詞出現的頻度。針對前面的分詞列表,進行如下循環(huán):如果是新詞,加入字典,頻度設置為1;如果字典中已經有了,就將頻度加1。代碼如圖:
我們接下來需要處理虛詞和標點符號問題。所謂虛詞,就是一些語氣詞和語法助詞,例如“啊”“的”“得”“地”等,這些虛詞和標點符號的出現頻度很高,但在語義分析中沒有意義,一般來說需要除去。除去這些內容的主要辦法是使用停詞文件和停詞列表。
停詞文件是一個事先準備好的TXT文本文件,里面是一些常見的語氣詞、助詞和各種標點符號,每個詞一行。停詞文件可以從網上找到,是別人整理好的,自己在使用中也可以根據經驗加入自己的“停詞”,也就是需要過濾掉的詞。程序讀取停詞文件,存放在停詞列表中。具體代碼如下:
stop_words=open(‘stop.txt,encodi
ng=“utf-8”).read().splitlines()
這里的splitlines()函數可以把讀取到的文件按行存儲到列表中,每行是一個元素。
接下來,我們使用停詞列表,把前面列表中的停詞刪除。
另外,中文文本中,一些出現頻度比較低的詞可能也沒有太大意義,也可以酌情去掉:
代碼這樣寫的主要原因是字典不能在循環(huán)的時候刪除元素。注意具體出現頻度多低的詞可以去掉,需要根據文本長度和詞的數量來斟酌,也可以先生成詞云圖觀察后再做調整。
詞云圖的生成通常調用第三方庫wordcloud。這個庫在使用之前也需要安裝。具體方法是在操作系統(tǒng)的命令行下輸入如下指令:
pip install wordcloud
然后在程序中先導入wordcloud再使用,即:
import wordcloud
然后,利用模塊中的Wordcloud()方法生成實例化對象,該方法的常用參數如下:background_color表示顏色,默認為黑色;width和height表示生成的詞云圖的寬和高,單位是像素;font_path表示字體文件的路徑;max_font_size表示最大字號;max_words表示最多容納的詞匯。這些參數都有默認值,不是必需的,但對中文詞云分析來說,font_path參數是必須設置的,否則無法顯示漢字。這里我們進行如下設置:
接下來,需要把前面處理好的詞頻字典對象交給詞云對象:
w.generate_from_frequencies(words_freq)
最后,詞云對象就可以導出生成詞云圖了,這是一個.png格式的圖片文件,需要指定路徑和文件名。
w.to_file(‘e:/新能源.png)
程序就這樣完成了。運行結果如下圖:
注意詞云實例化參數中的max_font_size決定了這個詞云圖中最大號詞的字號,font_path指向的是Windows系統(tǒng)中的黑體字,如果想使用其他字體,需要指向對應的字體文件。整理后完整代碼如圖。