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