天天看點

[python] 使用Jieba工具中文分詞及文本聚類概念

        内容如下圖所示,共204個國家5a級景點的摘要資訊。這裡就不再叙述:

[python] 使用Jieba工具中文分詞及文本聚類概念
[python] 使用Jieba工具中文分詞及文本聚類概念

        結巴中文分詞涉及到的算法包括:

        (1) 基于trie樹結構實作高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(dag);

        (2) 采用了動态規劃查找最大機率路徑, 找出基于詞頻的最大切分組合;

        (3) 對于未登入詞,采用了基于漢字成詞能力的hmm模型,使用了viterbi算法。

        結巴中文分詞支援的三種分詞模式包括:

        (1) 精确模式:試圖将句子最精确地切開,适合文本分析;

        (2) 全模式:把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義問題;

        (3) 搜尋引擎模式:在精确模式的基礎上,對長詞再次切分,提高召回率,适合用于搜尋引擎分詞。

        同時結巴分詞支援繁體分詞和自定義字典方法。

        輸出如下圖所示:

[python] 使用Jieba工具中文分詞及文本聚類概念

        代碼中函數簡單介紹如下:

        jieba.cut():第一個參數為需要分詞的字元串,第二個cut_all控制是否為全模式。

        jieba.cut_for_search():僅一個參數,為分詞的字元串,該方法适合用于搜尋引擎構造反向索引的分詞,粒度比較細。

        其中待分詞的字元串支援gbk\utf-8\unicode格式。傳回的結果是一個可疊代的generator,可使用for循環來擷取分詞後的每個詞語,更推薦使用轉換為list清單。

        2.添加自定義詞典

        由于"國家5a級景區"存在很多旅遊相關的專有名詞,舉個例子:

   [輸入文本] 故宮的著名景點包括乾清宮、太和殿和黃琉璃瓦等

   [精确模式] 故宮/的/著名景點/包括/乾/清宮/、/太和殿/和/黃/琉璃瓦/等

   [全 模 式] 故宮/的/著名/著名景點/景點/包括/乾/清宮/太和/太和殿/和/黃/琉璃/琉璃瓦/等

        顯然,專有名詞"乾清宮"、"太和殿"、"黃琉璃瓦"(假設為一個文物)可能因分詞而分開,這也是很多分詞工具的又一個缺陷。但是jieba分詞支援開發者使用自定定義的詞典,以便包含jieba詞庫裡沒有的詞語。雖然結巴有新詞識别能力,但自行添加新詞可以保證更高的正确率,尤其是專有名詞。

        基本用法:jieba.load_userdict(file_name) #file_name為自定義詞典的路徑

        詞典格式和dict.txt一樣,一個詞占一行;每一行分三部分,一部分為詞語,另一部分為詞頻,最後為詞性(可省略,ns為地點名詞),用空格隔開。

        強烈推薦一篇詞性标注文章,連結如下:

        輸出結果如下所示,其中專有名詞連在一起,即"乾清宮"和"黃琉璃瓦"。

[python] 使用Jieba工具中文分詞及文本聚類概念

        3.關鍵詞提取

        在建構vsm向量空間模型過程或者把文本轉換成數學形式計算中,你需要運用到關鍵詞提取的技術,這裡就再補充該内容,而其他的如詞性标注、并行分詞、擷取詞位置和搜尋引擎就不再叙述了。

        基本方法:jieba.analyse.extract_tags(sentence, topk) 

        需要先import jieba.analyse,其中sentence為待提取的文本,topk為傳回幾個tf/idf權重最大的關鍵詞,預設值為20。

        輸出結果如下,其中"午門"出現3次、"乾清宮"出現2次、"著名景點"出現1次,按照順序輸出提取的關鍵詞。如果topk=5,則輸出:"午門 乾清宮 著名景點 太和殿 向陽"。

        4.對百度百科擷取摘要分詞

        從baiduspider檔案中讀取0001.txt~0204.txt檔案,分别進行分詞處理再儲存。

        運作結果如下圖所示:

[python] 使用Jieba工具中文分詞及文本聚類概念

        5.去除停用詞

        在資訊檢索中,為節省存儲空間和提高搜尋效率,在處理自然語言資料(或文本)之前或之後會自動過濾掉某些字或詞,這些字或詞即被稱為stop words(停用詞)。這些停用詞都是人工輸入、非自動化生成的,生成後的停用詞會形成一個停用詞表。但是,并沒有一個明确的停用詞表能夠适用于所有的工具。甚至有一些工具是明确地避免使用停用詞來支援短語搜尋的。[參考百度百科]

[python] 使用Jieba工具中文分詞及文本聚類概念

        文本聚類的主要依據聚類假設是:同類的文檔相似度較大,而非同類文檔相似度較小。同時使用無監督學習方法,聚類不需要訓練過程以及不需要預先對文檔手工标注類别,是以具有較高的靈活性和自動化處理能力。主要分為以下部分:

        (1) 預處理常用方法

        文本資訊預處理(詞性标注、語義标注),建構統計詞典,對文本進行詞條切分,完成文本資訊的分詞過程。

        (2) 文本資訊的特征表示

        采用方法包括布爾邏輯型、機率型、混合型和向量空間模型。其中向量空間模型vsm(vector space model)是将文檔映射成向量的形式,(t1, t2, ..., tn)表示文檔詞條,(w1, w2, ..., wn)文檔詞條對應權重。建立文本特征主要用特征項或詞條來表示目标文本資訊,構造評價函數來表示詞條權重,盡最大限度差別不同的文檔。

        (3) 文本資訊特征縮減

        vsm文檔特征向量維數衆多。是以,在文本進行聚類之前,應用文本資訊特征集進行縮減,針對每個特征詞的權重排序,選取最佳特征,包括tf-idf。推薦向量稀疏表示方法,提升聚類的效果,其中(d1, d2, ..., dn)表示權重不為0的特征詞條。

        (4) 文本聚類

        文本内容表示成數學課分析形勢後,接下來就是在此數學基礎上進行文本聚類。包括基于機率方法和基于距離方法。其中基于機率是利用貝葉斯機率理論,機率分布方式;基于聚類是特征向量表示文檔(文檔看成一個點),通過計算點之間的距離,包括層次聚類法和平面劃分法。

       後面我可能也會寫具體的python聚類算法,vsm計算相似度我前面已經講過。同時,他的實驗資料是搜狐中心的10個大類,包括汽車、财經、it、體育等,而我的資料都是旅遊,如何進一步聚類劃分,如山川、河流、博物館等等,這是另一個難點。

        最後還是那句話:不論如何,希望文章對你有所幫助,如果文章中有錯誤或不足之處,還請海涵~寫文不易,且看且分析。加油!!!