石鳳貴
(馬鞍山師范高等專科學(xué)校軟件工程系,馬鞍山243041)
隨著大數(shù)據(jù)和人工智能的快速發(fā)展,大數(shù)據(jù)和人工智能給人們學(xué)習(xí)、工作和生活帶來了居多便利。分詞是分析處理文本數(shù)據(jù)的基礎(chǔ),廣泛應(yīng)用于很多領(lǐng)域,自然語言處理的預(yù)處理首要任務(wù)就是分詞。自然語言處理包括信息檢索、語音合成、文本分類、自動文摘等[1]。目前比較成熟的分詞工具有:jieba、SnowNLP、THULAC、NLPIR 等。詞云是一種以可視化的方式顯示文本關(guān)鍵詞的技術(shù),在分詞的基礎(chǔ)上設(shè)計實現(xiàn),根據(jù)關(guān)鍵詞的詞頻使用不同的方式展示,以有興趣、高效、形象的方式展示。
中文語句是一種字符序列,由字和詞構(gòu)成,同一個字詞在不同的語句中或在不同的文本中意義不同。計算機要準(zhǔn)確理解文本,首先需要進行文本分詞,按照一定的分詞規(guī)則和算法對文本進行切分。分詞就是依據(jù)某一規(guī)則和算法將文本中詞切分出來,構(gòu)成詞列表,后續(xù)對文本的分析理解就是基于分詞列表。分詞算法主要包括基于字符串匹配、基于統(tǒng)計和基于理解三類。
首先,中文語句中詞與詞之間沒有明顯的分隔標(biāo)志,不像英文語句中詞與詞之間通過空格進行分隔。其次,中文中字詞和短語無論是字?jǐn)?shù)、結(jié)構(gòu)、構(gòu)成方面沒有明顯的界線,容易產(chǎn)生不同的切分結(jié)果。其三,中文詞在不同的文本環(huán)境中表達的意思不同,而且一個中文詞具有多種意思,容易產(chǎn)生歧義。其四,實體名詞如人名、地名、機構(gòu)名、商品名、簡稱等難易識別切分,另外網(wǎng)絡(luò)上和新媒體環(huán)境下經(jīng)常會出現(xiàn)一些新詞、網(wǎng)絡(luò)流行用語,行業(yè)領(lǐng)域具有行業(yè)專業(yè)術(shù)語,這些詞難易識別和全面識別。其五,切出來的字詞長度也影響分詞效果[2]。
jieba 為一款被廣泛使用的Python 第三方中文分詞庫,Python 提供了jieba 分詞接口。jieba 中文分詞工具算法簡單、準(zhǔn)確率高,適合于中文分詞,支持三種分詞模式,功能強大。jieba 功能結(jié)構(gòu)圖如圖1 所示。
圖1 jieba功能結(jié)果圖
jieba 分詞基于前綴詞典實現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖(DAG),采用了動態(tài)規(guī)劃查找最大概率路徑,找出基于詞頻的最大切分組合。對于未登錄詞,采用了基于漢字成詞能力的HMM 模型(Hidden Markov Model,隱馬爾可夫模型),使用了Viterbi 算法[3]。
(1)分詞
jieba 支持三種分詞模式:精確模式,試圖將句子最精確地切開,適合文本分析;全模式,把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義;搜索引擎模式,在精確模式的基礎(chǔ)上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞[3]。jieba 提供的分詞方法如表1 所示。
(2)加載自定義詞典
jieba 有新詞識別能力,但是自行添加新詞可以保證更高的正確率,可以解決未登錄詞問題。用戶可以自定義詞典,添加默認(rèn)詞庫中未包含的詞。同時,自定義詞典可以實現(xiàn)歧義消解。詞典格式與默認(rèn)詞典一致,每個詞一行,包括詞語、詞頻(可省略)、詞性(可省略)三部分,用空格隔開,順序不能顛倒。加載詞典采用如下方法:
除了自定義詞典外,還可以調(diào)整默認(rèn)詞典:
(3)關(guān)鍵詞提取
jieba 關(guān)鍵詞提取有兩種算法,一種是基于TF-IDF算法的關(guān)鍵詞抽取,計算權(quán)重:
其中,sentence 為待提取的文本;topK 為返回幾個TF-IDF 權(quán)重最大的關(guān)鍵詞,默認(rèn)值為20;withWeight為是否一并返回關(guān)鍵詞權(quán)重值,默認(rèn)值為False;allow-POS 僅包括指定詞性的詞,默認(rèn)值為空,即不篩選。
另一種是基于TextRank 算法的關(guān)鍵詞抽取,計算權(quán)重并排序:
表1 jieba 分詞方法
(4)詞性標(biāo)注
新建自定義分詞器,tokenizer 參數(shù)可指定內(nèi)部使用的jieba.Tokenizer 分詞器。標(biāo)注句子分詞后每個詞的詞性,采用和ictclas 兼容的標(biāo)記法。
(5)并行分詞
并行分詞將目標(biāo)文本按行分隔后,把各行文本分配到多個Python 進程并行分詞,然后歸并結(jié)果,從而獲得分詞速度的提升,基于Python 自帶的multiprocessing模塊,目前暫不支持Windows。
并行分詞僅支持默認(rèn)分詞器jieba.dt 和jieba.posseg.dt。
(6)返回詞語在原文的起止位置
詞云就是將文本中高頻“關(guān)鍵詞”以可視化的方式呈現(xiàn),形象、生動、有趣,自動過濾低頻詞和非關(guān)鍵文本信息,直觀、一目了然,不同的詞采用不同的顏色表示。Python 中第三方庫WordCloud 是一款廣泛應(yīng)用于詞云展示的詞云庫。詞云以詞為基本單位,以文本中詞出現(xiàn)頻率作為參數(shù)生成,結(jié)果圖形化顯示。詞云屬性大小、顏色、形狀等均可設(shè)置[4]。
每個詞云是一個WordCloud 對象,生成詞云一般按照三個步驟設(shè)置就可以,第一步定義詞云對象并設(shè)置參數(shù),使用wordcloud.WordCloud()實現(xiàn);第二步生成詞云,使用wordcloudObj.generate(text)或wordcloudobj.generate_from_frequencies(frequencies[,…]);第三步輸出顯示詞云,使用matplotlib.pyplot 來顯示詞云,wordcloudObj.to_file(file_name)保存詞云為圖片文件。主要參數(shù)[5]見表2 所示。
表2 詞云參數(shù)
本文以“十九大四中全會決定”語料進行實現(xiàn)展示。
Python 是一門目前廣泛流行的計算機高級程序設(shè)計語言,在大數(shù)據(jù)、人工智能領(lǐng)域更是被廣泛使用,大數(shù)據(jù)與人工智能正處于快速發(fā)展階段,與Java、C、C++成為四大流行程序設(shè)計語言。Python 簡潔、優(yōu)美、開源、功能強大,許多社區(qū)提供了Python 技術(shù)的支持,第三方庫數(shù)以萬計。Python 廣泛應(yīng)用于桌面程序開發(fā)、Web 應(yīng)用開發(fā)、自動化測試運維、爬蟲、大數(shù)據(jù)處理、人工智能等各個領(lǐng)域,在IEEE Spectrum 發(fā)布的2017 和2018 年編程語言排行榜中位居第一。本文使用Python的第三方庫jieba 和WordCloud 進行分詞和生成詞云[6]。
十九屆四中全會審議通過了《中共中央關(guān)于堅持和完善中國特色社會主義制度、推進國家治理體系和治理能力現(xiàn)代化若干重大問題的決定》,號召全黨全國各族人民要更加緊密地團結(jié)在以習(xí)近平同志為核心的黨中央周圍,堅定信心,保持定力,銳意進取,開拓創(chuàng)新,為堅持和完善中國特色社會主義制度、推進國家治理體系和治理能力現(xiàn)代化,實現(xiàn)“兩個一百年”奮斗目標(biāo)、實現(xiàn)中華民族偉大復(fù)興的中國夢而努力奮斗[7]。本文以十九屆四中全會決定為語料生成詞云,直觀、圖形方式顯示“決定”核心關(guān)鍵詞。
(1)分詞
全模式分詞結(jié)果:
十 九/九 屆/四 中/四 中 全 會/全 會/在/北 京/勝 利/召開///北京/北京大學(xué)/大學(xué)/全校/全校師生/師生/收看/和/學(xué)習(xí)/會議/精神
精確模式分詞結(jié)果:
['十九','屆','四中全會','在','北京','勝利','召開',',','北京大學(xué)','全校師生','收看','和','學(xué)習(xí)','會議','精神']
默認(rèn)模式模式分詞結(jié)果:
十九/屆/四中全會/在/北京/勝利/召開/,/北京大學(xué)/全校師生/收看/和/學(xué)習(xí)/會議/精神
搜索引擎模式分詞結(jié)果:
十九/屆/四中/全會/四中全會/在/北京/勝利/召開/,/北京/大學(xué)/北京大學(xué)/全校/師生/全校師生/收看/和/學(xué)習(xí)/會議/精神
搜索引擎模式分詞結(jié)果:
['十九','屆','四中','全會','四中全會','在','北京','勝利','召開',',','北京','大學(xué)','北京大學(xué)','全校','師生','全校師生','收看','和','學(xué)習(xí)','會議','精神']
(2)加載自定義詞典
sentence="經(jīng)研究,王小二任招就辦主任,同時兼任主題教育學(xué)習(xí)教學(xué)辦主任" #“招就辦”和“教學(xué)辦”為獨立詞print("分詞結(jié)果:","/".join(jieba.cut(sentence)))>>
分詞結(jié)果:經(jīng)/研究/,/王小二/任/招就辦/主任/,/同時/兼任/主題/教育/學(xué)習(xí)/教學(xué)辦/主任
自定義詞典userdict.txt,內(nèi)容:
(3)關(guān)鍵詞提取
自定義IDF 文本語料庫idf_user.txt(圖2 所示)作為IDF 語料庫進行關(guān)鍵詞提取。
圖2 自定義IDF語料庫
圖3 自定義stopwords
(4)詞性標(biāo)注
(5)返回詞語在原文的起止位置
輸出結(jié)果如圖4 所示。
圖4 詞云(矩形)
輸出結(jié)果如圖5 所示。
圖5 不分詞直接生成的詞云
輸出結(jié)果如圖6 所示。
圖6 以中國地圖為模板生成的詞云
圖7 詞云(去停用詞、指定關(guān)鍵詞數(shù)、縮放)
輸出結(jié)果如圖7 所示。
輸出結(jié)果如圖8 所示。
輸出結(jié)果如圖9 所示。
文本分詞是自然語言處理的基礎(chǔ),jieba 中文分詞工具是一款廣泛使用的文本分詞工具。Python 語言是當(dāng)下熱門計算機語言,廣泛應(yīng)用于各個領(lǐng)域,功能強大,擁有許多第三方庫和社區(qū)支持。本文以十九屆四中全會決定為語料,基于jieba 和WordCloud 庫詳細(xì)介紹了中文分詞與詞云生成技術(shù)。
圖8 詞云(顯示輪廓)
圖9 詞云(模板顏色)