亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注

系統(tǒng) 2723 0

本系列文章主要結(jié)合Python語(yǔ)言實(shí)現(xiàn)知識(shí)圖譜構(gòu)建相關(guān)工程,具有一定創(chuàng)新性和實(shí)用性,非常希望各位博友交流討論,相互促進(jìn)成長(zhǎng)。前面兩篇文章詳細(xì)講解了哈工大Pyltp工具,包括中文分詞、詞性標(biāo)注、實(shí)體識(shí)別、依存句法分析和語(yǔ)義角色標(biāo)注等。但是其中文分詞效果不是很理想,如“貴州財(cái)經(jīng)大學(xué)”總是切分成“貴州”、“財(cái)經(jīng)”和“大學(xué)”,這是因?yàn)樵~典中這些詞的權(quán)重較高。這篇文章主要介紹最經(jīng)典的自然語(yǔ)言處理工具之一——Jieba,包括中文分詞、添加自定義詞典及詞性標(biāo)注等內(nèi)容。

知識(shí)圖譜系列文章:
[知識(shí)圖譜實(shí)戰(zhàn)篇] 一.數(shù)據(jù)抓取之Python3抓取JSON格式的電影實(shí)體
[知識(shí)圖譜實(shí)戰(zhàn)篇] 二.Json+Seaborn可視化展示電影實(shí)體
[知識(shí)圖譜實(shí)戰(zhàn)篇] 三.Python提取JSON數(shù)據(jù)、HTML+D3構(gòu)建基本可視化布局
[知識(shí)圖譜實(shí)戰(zhàn)篇] 四.HTML+D3+CSS繪制關(guān)系圖譜
[知識(shí)圖譜實(shí)戰(zhàn)篇] 五.HTML+D3添加鼠標(biāo)響應(yīng)事件顯示相關(guān)節(jié)點(diǎn)及邊
[知識(shí)圖譜實(shí)戰(zhàn)篇] 六.HTML+D3實(shí)現(xiàn)點(diǎn)擊節(jié)點(diǎn)顯示相關(guān)屬性及屬性值
[知識(shí)圖譜實(shí)戰(zhàn)篇] 七.HTML+D3實(shí)現(xiàn)關(guān)系圖譜搜索功能
[知識(shí)圖譜實(shí)戰(zhàn)篇] 八.HTML+D3繪制時(shí)間軸線及顯示實(shí)體

環(huán)境下載地址:https://download.csdn.net/download/eastmount/11226539

原文地址:
[Python知識(shí)圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導(dǎo)入詞典基本用法
[Python知識(shí)圖譜] 二.哈工大pyltp詞性標(biāo)注、命名實(shí)體識(shí)別、依存句法分析和語(yǔ)義角色標(biāo)注

參考前文:
[python] 使用Jieba工具中文分詞及文本聚類概念 - eastmount
楊秀璋. Python網(wǎng)絡(luò)數(shù)據(jù)爬取及分析從入門到精通(分析篇). 北京:北京航空航天大學(xué)出版社[M]. 2018


一.Jieba工具

在數(shù)據(jù)分析和數(shù)據(jù)挖掘中,通常需要經(jīng)歷前期準(zhǔn)備、數(shù)據(jù)爬取、數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析、數(shù)據(jù)可視化、評(píng)估分析等步驟,而數(shù)據(jù)分析之前的工作幾乎要花費(fèi)數(shù)據(jù)工程師近一半的工作時(shí)間,其中的數(shù)據(jù)預(yù)處理也將直接影響后續(xù)模型分析的好壞。

數(shù)據(jù)預(yù)處理(Data Preprocessing)是指在進(jìn)行數(shù)據(jù)分析之前,對(duì)數(shù)據(jù)進(jìn)行的一些初步處理,包括缺失值填寫、噪聲處理、不一致數(shù)據(jù)修正、中文分詞等,其目標(biāo)是得到更標(biāo)準(zhǔn)、高質(zhì)量的數(shù)據(jù),糾正錯(cuò)誤異常數(shù)據(jù),從而提升分析的結(jié)果。
下圖是中文文本預(yù)處理的基本步驟,包括中文分詞、詞性標(biāo)注、數(shù)據(jù)清洗、特征提?。ㄏ蛄靠臻g模型存儲(chǔ))、權(quán)重計(jì)算(TF-IDF)等

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第1張圖片

“結(jié)巴”(Jieba)工具是最常用的中文文本分詞和處理的工具之一,它能實(shí)現(xiàn)中文分詞、詞性標(biāo)注、關(guān)鍵詞抽取、獲取詞語(yǔ)位置等功能。其在Github網(wǎng)站上的介紹及下載地址為:https://github.com/fxsjy/jieba

作者推薦大家使用PIP工具來(lái)安裝Jieba中文分詞包,安裝語(yǔ)句如下:

            
              pip install jieba

            
          

調(diào)用命令“pip install jieba”安裝jieba中文分詞包如下圖所示。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第2張圖片

安裝過(guò)程中的會(huì)顯示安裝配置相關(guān)包和文件的百分比,直到出現(xiàn)“Successfully installed jieba-0.37”命令,表示安裝成功。同時(shí),在安裝過(guò)程中會(huì)遇到各種問(wèn)題,大家一定要學(xué)會(huì)獨(dú)立搜索答案解決這些問(wèn)題,才能提升您獨(dú)立解決問(wèn)題的能力。


Jieba工具具有有以下特點(diǎn):

  • 支持三種分詞模式,包括精確模式、全模式和搜索引擎模式
  • 支持繁體分詞
  • 支持自定義詞典
  • 代碼對(duì)Python2和Python3均兼容
  • 支持多種編程語(yǔ)言,包括Java、C++、Rust、PHP、R、Node.js等

Jieba工具主要使用的算法包括:(1)通過(guò)基于前綴詞典實(shí)現(xiàn)高效的詞圖掃描,構(gòu)建句子中漢字所有可能生成詞情況的有向無(wú)環(huán)圖;(2)采用動(dòng)態(tài)規(guī)劃查找最大概率路徑,尋找基于詞頻的最大切分組合;(3)對(duì)于未登錄詞,采用基于漢字成詞能力的HMM模型結(jié)合Viterbi算法。


二.中文分詞

1.基礎(chǔ)知識(shí)

由于中文詞語(yǔ)之間是緊密聯(lián)系的,一個(gè)漢語(yǔ)句子是由一串前后連續(xù)的漢字組成,詞與詞之間沒(méi)有明顯的分界標(biāo)志,所以需要通過(guò)一定的分詞技術(shù)把句子分割成空格連接的詞序列,這就是所謂的中文分詞技術(shù)。

中文分詞(Chinese Word Segmentation)指將漢字序列切分成一個(gè)個(gè)單獨(dú)的詞或詞串序列,它能夠在沒(méi)有詞邊界的中文字符串中建立分隔標(biāo)志,通常采用空格分隔。中文分詞是數(shù)據(jù)分析預(yù)處理、數(shù)據(jù)挖掘、文本挖掘、搜索引擎、知識(shí)圖譜、自然語(yǔ)言處理等領(lǐng)域中非?;A(chǔ)的知識(shí)點(diǎn),只有經(jīng)過(guò)中文分詞后的語(yǔ)料才能轉(zhuǎn)換為數(shù)學(xué)向量的形式,繼續(xù)進(jìn)行后面的分析。同時(shí),由于中文數(shù)據(jù)集涉及到語(yǔ)義、歧義等知識(shí),劃分難度較大,比英文復(fù)雜很多。

下面舉個(gè)簡(jiǎn)單示例,對(duì)句子“我是程序員”進(jìn)行分詞操作。

輸入:我是程序員
輸出1:我\是\程\序\員
輸出2:我是\是程\程序\序員
輸出3:我\是\程序員

這里分別采用了三種方法介紹中文分詞?!拔襖是\程\序\員”采用的是一元分詞法,將中文字符串分隔為單個(gè)漢字;“我是\是程\程序\序員”采用二元分詞法,將中文漢字兩兩分隔;“我\是\程序員”是比較復(fù)雜但更實(shí)用的分詞方法,它根據(jù)中文語(yǔ)義來(lái)進(jìn)行分詞的,其分詞結(jié)果更準(zhǔn)確。

中文分詞方法有很多,常見(jiàn)的包括基于字符串匹配的分詞方法、基于統(tǒng)計(jì)的分詞方法和基于語(yǔ)義的分詞方法等。這里介紹比較經(jīng)典的基于字符串匹配的分詞方法。

基于字符串匹配的分詞方法又稱為基于字典的分詞方法,它按照一定策略將待分析的中文字符串與機(jī)器詞典中的詞條進(jìn)行匹配,若在詞典中找到某個(gè)字符串,則匹配成功,并識(shí)別出對(duì)應(yīng)的詞語(yǔ)。該方法的匹配原則包括最大匹配法(MM)、逆向最大匹配法(RMM)、逐詞遍歷法、最佳匹配法(OM)、并行分詞法等。

正向最大匹配法的步驟如下,假設(shè)自動(dòng)分詞詞典中的最長(zhǎng)詞條所含漢字的個(gè)數(shù)為n。

  • 從被處理文本中選取當(dāng)前中文字符串中的前n個(gè)中文漢字作為匹配字段,查找分詞詞典,若詞典中存在這樣一個(gè)n字詞,則匹配成功,匹配字段作為一個(gè)詞被切分出來(lái)。
  • 若分詞詞典中找不到這樣的一個(gè)n字詞,則匹配失敗,匹配字段去掉最后一個(gè)漢字,剩下的中文字符作為新的匹配字段,繼續(xù)進(jìn)行匹配。
  • 循環(huán)前兩個(gè)步驟進(jìn)行匹配,直到匹配成功為止。

例如,現(xiàn)在存在一個(gè)句子“北京理工大學(xué)生前來(lái)應(yīng)聘”,使用正向最大匹配方法進(jìn)行中文分詞的過(guò)程如下所示。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第3張圖片

2.基本用法

首先讀者看一段簡(jiǎn)單的結(jié)巴分詞代碼,主要調(diào)用兩個(gè)函數(shù)實(shí)現(xiàn)。

  • jieba.cut(text,cut_all=True)
    分詞函數(shù),第一個(gè)參數(shù)是需要分詞的字符串,第二個(gè)參數(shù)表示是否為全模式。分詞返回的結(jié)果是一個(gè)可迭代的生成器(generator),可使用for循環(huán)來(lái)獲取分詞后的每個(gè)詞語(yǔ),更推薦讀者轉(zhuǎn)換為list列表再使用。
  • jieba.cut_for_search(text)
    搜索引擎模式分詞,參數(shù)為分詞的字符串,該方法適合用于搜索引擎構(gòu)造倒排索引的分詞,粒度比較細(xì)。
            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  
  
text 
              
                =
              
              
                "小楊畢業(yè)于北京理工大學(xué),從事Python人工智能相關(guān)工作。"
              
              
                #全模式
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
              cut_all
              
                =
              
              
                True
              
              
                )
              
              
                print
              
              
                (
              
              
                type
              
              
                (
              
              data
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[全模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
              cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
              
                #默認(rèn)是精確模式 
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[默認(rèn)模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
              
                #搜索引擎模式 
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut_for_search
              
                (
              
              text
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[搜索引擎模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
              
                #返回列表
              
              
seg_list 
              
                =
              
               jieba
              
                .
              
              lcut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              
                "[返回列表]: {0}"
              
              
                .
              
              
                format
              
              
                (
              
              seg_list
              
                )
              
              
                )
              
            
          

輸出結(jié)果如下所示。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第4張圖片

最終的分詞結(jié)果比較理想,其中精確模式輸出的“小/楊/畢業(yè)/于/北京理工大學(xué)/,/從事/Python/人工智能/相關(guān)/工作/。”比較精準(zhǔn)。下面簡(jiǎn)單敘述結(jié)巴中文分詞的三種分詞模式。

全模式
該模式將語(yǔ)料中所有可以組合成詞的詞語(yǔ)都構(gòu)建出來(lái),其優(yōu)點(diǎn)是速度非???,缺點(diǎn)是不能解決歧義問(wèn)題,并且分詞結(jié)果不太準(zhǔn)確。其分詞結(jié)果為“小/楊/畢業(yè)/于/北京/北京理工/北京理工大學(xué)/理工/理工大/理工大學(xué)/工大/大學(xué)///從事/Python/人工/人工智能/智能/相關(guān)/工作//”。

精確模式
該模式利用其算法將句子最精確地分隔開,適合文本分析,通常采用這種模式進(jìn)行中文分詞。其分詞結(jié)果為“小/楊/畢業(yè)/于/北京理工大學(xué)/,/從事/Python/人工智能/相關(guān)/工作/?!保渲小氨本├砉ご髮W(xué)”、“人工智能”這些完整的名詞被精準(zhǔn)識(shí)別,但也有部分詞未被識(shí)別,后續(xù)導(dǎo)入詞典可以實(shí)現(xiàn)專有詞匯識(shí)別。

搜索引擎模式
該模式是在精確模式基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。其結(jié)果為“小/楊/畢業(yè)/于/北京/理工/工大/大學(xué)/理工大/北京理工大學(xué)/,/從事/Python/人工/智能/人工智能/相關(guān)/工作/?!?。

3.基于HMM模型的中文分詞

隱馬爾可夫模型(Hidden Markov Model, HMM)是一種基于概率的統(tǒng)計(jì)分析模型,用來(lái)描述一個(gè)系統(tǒng)隱性狀態(tài)的轉(zhuǎn)移和隱性狀態(tài)的表現(xiàn)概率。到目前為止,HMM模型被認(rèn)為是解決大多數(shù)自然語(yǔ)言處理問(wèn)題最為快速、有效的方法之一。它成功解決了語(yǔ)義識(shí)別、機(jī)器翻譯等問(wèn)題。

在Jieba工具中,對(duì)于未登錄到詞庫(kù)的詞,使用了基于漢字成詞能力的 HMM 模型和 Viterbi 算法,其大致原理是采用四個(gè)隱含狀態(tài),分別表示為單字成詞、詞組的開頭、詞組的中間和詞組的結(jié)尾。通過(guò)標(biāo)注好的分詞訓(xùn)練集,可以得到 HMM的各個(gè)參數(shù),然后使用 Viterbi 算法來(lái)解釋測(cè)試集,得到分詞結(jié)果。

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  
  
text 
              
                =
              
              
                "他來(lái)到了網(wǎng)易杭研大廈工作,我繼續(xù)去北理讀研。"
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                ,
              
               HMM
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
              
                #精確模式+HMM
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                ,
              
               HMM
              
                =
              
              
                True
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
            
          

輸出結(jié)果如下圖所示,未啟用HMM模型時(shí),它無(wú)法識(shí)別“杭研”、“北理”詞語(yǔ),將其拆分成了“杭”、“研”和“北”、“理”,而啟用HMM模型時(shí),它有效識(shí)別了新詞“杭研”、“北理”。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第5張圖片

4.繁體中文分詞

Jieba工具支持中文繁體字的識(shí)別,將前面示例轉(zhuǎn)換為繁體字,即“小楊畢業(yè)於北京理工大學(xué),從事Python人工智能相關(guān)工作?!保{(diào)用Jieba分詞的代碼如下所示。

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  
  
text 
              
                =
              
              
                "小楊畢業(yè)於北京理工大學(xué),從事Python人工智能相關(guān)工作。"
              
              
                #全模式
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                True
              
              
                )
              
              
                print
              
              
                (
              
              
                type
              
              
                (
              
              data
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[全模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
              
                #搜索引擎模式 
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut_for_search
              
                (
              
              text
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[搜索引擎模式]: "
              
              
                ,
              
              
                "/"
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
            
          

輸出結(jié)果如下所示:

            
              
                [
              
              全模式
              
                ]
              
              
                :
              
                /
              
                /
              
                /
              
              業(yè)
              
                /
              
                /
              
              北京
              
                /
              
              北京理工
              
                /
              
              理工
              
                /
              
              理工大
              
                /
              
              工大
              
                /
              
              學(xué)
              
                //
              
              
                /
              
                /
              
                /
              
              Python
              
                /
              
              人工
              
                /
              
              人工智能
              
                /
              
              智能
              
                /
              
                /
              
              關(guān)
              
                /
              
              工作
              
                //
              
              
                [
              
              精確模式
              
                ]
              
              
                :
              
                /
              
                /
              
              畢業(yè)
              
                /
              
                /
              
              北京理工
              
                /
              
              大學(xué)
              
                /
              
              ,
              
                /
              
              從事
              
                /
              
              Python
              
                /
              
              人工智能
              
                /
              
              相關(guān)
              
                /
              
              工作
              
                /
              
              。

              
                [
              
              搜索引擎模式
              
                ]
              
              
                :
              
                /
              
                /
              
              畢業(yè)
              
                /
              
                /
              
              北京
              
                /
              
              理工
              
                /
              
              北京理工
              
                /
              
              大學(xué)
              
                /
              
              ,
              
                /
              
              從事
              
                /
              
              Python
              
                /
              
              人工
              
                /
              
              智能
              
                /
              
              人工智能
              
                /
              
              相關(guān)
              
                /
              
              工作
              
                /
              
              。

            
          

三.添加自定義詞典

1.添加詞典

在進(jìn)行中文分詞過(guò)程中,通常會(huì)遇到一些專用詞語(yǔ)無(wú)法精準(zhǔn)的切分,比如“乾清宮”會(huì)被分割為“乾”、“清宮”,“黃果樹瀑布”會(huì)被分割為“黃果樹”、“瀑布”,“云計(jì)算”會(huì)被分割為“云”、“計(jì)算”,“貴州財(cái)經(jīng)大學(xué)”會(huì)被分割為“貴州”、“財(cái)經(jīng)大學(xué)”等。雖然Jieba工具有新詞識(shí)別能力,但也無(wú)法識(shí)別出所有Jieba詞庫(kù)里沒(méi)有的詞語(yǔ),但它為開發(fā)者提供了添加自定義詞典功能,從而保證更好的分詞正確率。其函數(shù)原型如下:

  • load_userdict(f)
    該函數(shù)只有一個(gè)參數(shù),表示載入的自定義詞典路徑,f 為文件類對(duì)象或自定義詞典路徑下的文件。詞典的格式為:一個(gè)詞占一行,每行分為三部分:
            
              word  freq  word_type

            
          

其中,word為對(duì)應(yīng)的詞語(yǔ),freq為詞頻(可省略),word_type為詞性(可省了),中間用空格隔開,順序不可以改變。注意,文件必須為UTF-8編碼。

下面舉例講解,第一個(gè)代碼是未導(dǎo)入自定義詞典的中文分詞。

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  
  
text 
              
                =
              
              
                "小楊在貴州財(cái)經(jīng)大學(xué)工作,擅長(zhǎng)大數(shù)據(jù)、云計(jì)算,喜歡乾清宮、黃果樹瀑布等景區(qū)。"
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[原始文本]: "
              
              
                ,
              
               text
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                " "
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
            
          

輸出結(jié)果未將“貴州財(cái)經(jīng)大學(xué)”、“大數(shù)據(jù)”、“云計(jì)算”、“乾清宮”、“黃果樹瀑布”等詞匯正確分割。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第6張圖片

接著導(dǎo)入自定義詞典,其本地詞典命名為“dict.txt”,如圖所示,包括設(shè)置“貴州財(cái)經(jīng)大學(xué)”的詞性為機(jī)構(gòu)名詞“nt”,“大數(shù)據(jù)”、“云計(jì)算”的詞性為名詞“n”,也有省略詞性和詞頻的“乾清宮”。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第7張圖片

完整代碼如下:

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  

text 
              
                =
              
              
                "楊秀璋在貴州財(cái)經(jīng)大學(xué)工作,擅長(zhǎng)大數(shù)據(jù)、云計(jì)算,喜歡乾清宮、黃果樹瀑布等景區(qū)。"
              
              
                #導(dǎo)入自定義詞典
              
              
jieba
              
                .
              
              load_userdict
              
                (
              
              
                "dict.txt"
              
              
                )
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[原始文本]: "
              
              
                ,
              
               text
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                " "
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
            
          

此時(shí)的輸出結(jié)果有效地提取了“貴州財(cái)經(jīng)大學(xué)”、“云計(jì)算”、“乾清宮”。但也有兩個(gè)未識(shí)別出的詞語(yǔ),“黃果樹瀑布”不在詞典中,故被拆分成了“黃果樹”和“瀑布”,“大數(shù)據(jù)”雖然在詞典中,卻仍然拆分成了“大”和“數(shù)據(jù)”。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第8張圖片

2.動(dòng)態(tài)修改詞典

在Jieba工具中,可以在程序中動(dòng)態(tài)修改詞典,通過(guò)add_word(word, freq=None, tag=None)函數(shù)添加新詞語(yǔ),通過(guò)del_word(word)函數(shù)刪除自定義詞語(yǔ)。

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  

text 
              
                =
              
              
                "小楊在貴州財(cái)經(jīng)大學(xué)工作,擅長(zhǎng)大數(shù)據(jù)、云計(jì)算,喜歡乾清宮、黃果樹瀑布等景區(qū)。"
              
              
                #導(dǎo)入自定義詞典
              
              
jieba
              
                .
              
              load_userdict
              
                (
              
              
                "dict.txt"
              
              
                )
              
              
                #添加自定義詞語(yǔ)
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "小楊"
              
              
                )
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "黃果樹瀑布"
              
              
                )
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "自然語(yǔ)言處理"
              
              
                ,
              
               freq
              
                =
              
              
                10
              
              
                ,
              
               tag
              
                =
              
              
                "nz"
              
              
                )
              
              
                #刪除自定義詞語(yǔ)
              
              
jieba
              
                .
              
              del_word
              
                (
              
              
                "北理工"
              
              
                )
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[原始文本]: "
              
              
                ,
              
               text
              
                ,
              
              
                "\n"
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                " "
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
            
          

該代碼增加了新詞語(yǔ)“小楊”、“黃果樹瀑布”和“自然語(yǔ)言處理”,刪除了“北理工”,其運(yùn)行結(jié)果如下所示,它有效地將“小楊”和“黃果樹瀑布”進(jìn)行了精準(zhǔn)識(shí)別。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第9張圖片

此時(shí),讀者可能會(huì)有一個(gè)疑問(wèn),為什么“大數(shù)據(jù)”被拆分成了“大”和“數(shù)據(jù)”呢?這是因?yàn)镴ieba詞庫(kù)中“大”和“數(shù)據(jù)”的重要程度更高,我們可以使用suggest_freq(segment, tune=True)函數(shù)調(diào)節(jié)單個(gè)詞語(yǔ)的詞頻,使其被分割出來(lái)。

代碼如下所示:

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  

text 
              
                =
              
              
                "小楊在貴州財(cái)經(jīng)大學(xué)工作,擅長(zhǎng)大數(shù)據(jù)、云計(jì)算,喜歡乾清宮、黃果樹瀑布等景區(qū)。"
              
              
                #導(dǎo)入自定義詞典
              
              
jieba
              
                .
              
              load_userdict
              
                (
              
              
                "dict.txt"
              
              
                )
              
              
                #添加自定義詞語(yǔ)
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "小楊"
              
              
                )
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "黃果樹瀑布"
              
              
                )
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "自然語(yǔ)言處理"
              
              
                ,
              
               freq
              
                =
              
              
                10
              
              
                ,
              
               tag
              
                =
              
              
                "nz"
              
              
                )
              
              
                #刪除自定義詞語(yǔ)
              
              
jieba
              
                .
              
              del_word
              
                (
              
              
                "北理工"
              
              
                )
              
              
                #調(diào)節(jié)詞頻
              
              
jieba
              
                .
              
              suggest_freq
              
                (
              
              
                '大數(shù)據(jù)'
              
              
                ,
              
              
                True
              
              
                )
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[原始文本]: "
              
              
                ,
              
               text
              
                ,
              
              
                "\n"
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                " "
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                )
              
            
          

最終的輸出結(jié)果為“ 小楊 貴州財(cái)經(jīng)大學(xué) 工作 , 擅長(zhǎng) 大數(shù)據(jù) 、 云計(jì)算 , 喜歡 乾清宮 、 黃果樹瀑布 等 景區(qū) ?!?

終于將“小楊”、“貴州財(cái)經(jīng)大學(xué)”、“大數(shù)據(jù)”、“云計(jì)算”、“乾清宮”、“黃果樹瀑布”等專有詞語(yǔ)識(shí)別出來(lái)。同時(shí),如果自定義詞典存在很多專用名詞,并且需要設(shè)置它們的高權(quán)重,可以使用下面的代碼循環(huán)設(shè)置每一個(gè)詞語(yǔ)的詞頻。

            
              
                #循環(huán)設(shè)置詞頻重要程度
              
              
fp 
              
                =
              
              
                open
              
              
                (
              
              
                "dict.txt"
              
              
                ,
              
              
                'r'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                for
              
               line 
              
                in
              
               fp
              
                :
              
              
    line 
              
                =
              
               line
              
                .
              
              strip
              
                (
              
              
                )
              
              
jieba
              
                .
              
              suggest_freq
              
                (
              
              line
              
                ,
              
              
                True
              
              
                )
              
              
                #第二種方法
              
              
                [
              
              jieba
              
                .
              
              suggest_freq
              
                (
              
              line
              
                .
              
              strip
              
                (
              
              
                )
              
              
                ,
              
              
                True
              
              
                )
              
              
                for
              
               line 
              
                in
              
              
                open
              
              
                (
              
              
                "dict.txt"
              
              
                ,
              
              
                'r'
              
              
                ,
              
              encoding
              
                =
              
              
                'utf8'
              
              
                )
              
              
                ]
              
            
          

四. 詞性標(biāo)注

詞性標(biāo)注(Part-Of-Speech Tagging, POS Tagging)也被稱為語(yǔ)法標(biāo)注(Grammatical Tagging)或詞類消疑(Word-category Disambiguation),是將語(yǔ)料庫(kù)內(nèi)單詞的詞性按其含義和上下文內(nèi)容進(jìn)行標(biāo)記的文本數(shù)據(jù)處理技術(shù)。通過(guò)詞性標(biāo)注處理,可以將分詞得到的詞序列中每個(gè)單詞標(biāo)注一個(gè)正確的詞性。

在Jieba工具中,調(diào)用jieba.posseg.POSTokenizer(tokenizer=None)函數(shù)新建自定義分詞器。tokenizer參數(shù)可指定內(nèi)部使用的jieba.Tokenizer分詞器,jieba.posseg.dt為默認(rèn)詞性標(biāo)注分詞器。Jieba工具采用和Ictclas 兼容的標(biāo)記法,標(biāo)注句子分詞后每個(gè)詞的詞性通過(guò)循環(huán)輸出。表4-1為Jieba工具的各個(gè)詞性及含義。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第10張圖片

官方文檔給出的示例如下所示,通過(guò)“import jieba.posseg as pseg”語(yǔ)句導(dǎo)入擴(kuò)展包,接著循環(huán)輸出word(詞語(yǔ))和flag(詞性)值。

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba
              
                .
              
              posseg 
              
                as
              
               pseg


              
                #詞性標(biāo)注
              
              
words 
              
                =
              
               pseg
              
                .
              
              cut
              
                (
              
              
                "我愛(ài)北京天安門"
              
              
                )
              
              
                for
              
               word
              
                ,
              
               flag 
              
                in
              
               words
              
                :
              
              
                print
              
              
                (
              
              
                '%s %s'
              
              
                %
              
              
                (
              
              word
              
                ,
              
               flag
              
                )
              
              
                )
              
            
          

輸出結(jié)果如圖所示,其中“我”表示代詞,對(duì)應(yīng)“r”;“愛(ài)”對(duì)應(yīng)動(dòng)詞,對(duì)應(yīng)“v”,“北京”和“天安門”對(duì)應(yīng)地點(diǎn)名詞,對(duì)應(yīng)“ns”。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第11張圖片

上面小節(jié)的示例對(duì)應(yīng)的詞性標(biāo)注代碼如下所示。

            
              
                #encoding=utf-8  
              
              
                import
              
               jieba  

              
                import
              
               jieba
              
                .
              
              posseg

              
                import
              
               jieba
              
                .
              
              analyse

text 
              
                =
              
              
                "小楊在貴州財(cái)經(jīng)大學(xué)工作,擅長(zhǎng)大數(shù)據(jù)、云計(jì)算,喜歡乾清宮、黃果樹瀑布等景區(qū)。"
              
              
                #導(dǎo)入自定義詞典
              
              
jieba
              
                .
              
              load_userdict
              
                (
              
              
                "dict.txt"
              
              
                )
              
              
                #添加自定義詞語(yǔ)
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "小楊"
              
              
                )
              
              
jieba
              
                .
              
              add_word
              
                (
              
              
                "黃果樹瀑布"
              
              
                )
              
              
                #調(diào)節(jié)詞頻
              
              
jieba
              
                .
              
              suggest_freq
              
                (
              
              
                '大數(shù)據(jù)'
              
              
                ,
              
              
                True
              
              
                )
              
              
                #精確模式  
              
              
data 
              
                =
              
               jieba
              
                .
              
              cut
              
                (
              
              text
              
                ,
              
               cut_all
              
                =
              
              
                False
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[原始文本]: "
              
              
                ,
              
               text
              
                ,
              
              
                "\n"
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "[精確模式]: "
              
              
                ,
              
              
                " "
              
              
                .
              
              join
              
                (
              
              data
              
                )
              
              
                ,
              
              
                "\n"
              
              
                )
              
              
                #詞性標(biāo)注
              
              
sentence_seged 
              
                =
              
               jieba
              
                .
              
              posseg
              
                .
              
              cut
              
                (
              
              text
              
                )
              
              
outstr 
              
                =
              
              
                ''
              
              
                for
              
               x 
              
                in
              
               sentence_seged
              
                :
              
              
    outstr 
              
                +=
              
              
                "{}/{}  "
              
              
                .
              
              
                format
              
              
                (
              
              x
              
                .
              
              word
              
                ,
              
               x
              
                .
              
              flag
              
                )
              
              
                print
              
              
                (
              
              u
              
                '[詞性標(biāo)注]:'
              
              
                ,
              
               outstr
              
                )
              
            
          

輸出結(jié)果如圖所示。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第12張圖片

五.總結(jié)

希望這篇基礎(chǔ)性文章對(duì)你有所幫助,如果有錯(cuò)誤或不足之處,還請(qǐng)海涵。下一篇將詳細(xì)講解Jieba工具實(shí)現(xiàn)關(guān)鍵詞抽取、事件抽取和命名實(shí)體識(shí)別等例子。望喜歡~同時(shí),后續(xù)分享更多的是網(wǎng)絡(luò)安全方面的文章了,從零開始很難,但秀璋會(huì)一路走下去的,加油。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第13張圖片

故人應(yīng)在千里外,
不寄梅花遠(yuǎn)信來(lái)。
武漢第一周學(xué)習(xí)結(jié)束,寄了第一封家書給女神,接下來(lái)這幾年,應(yīng)該會(huì)寫上200來(lái)封吧,很期待,也很漫長(zhǎng),但我倆的故事將繼續(xù)書寫。

今天早上做了我來(lái)這的第一次PPT匯報(bào),是關(guān)于網(wǎng)絡(luò)安全和數(shù)據(jù)挖掘、人工智能的融合,也聽了學(xué)弟們的匯報(bào),真的學(xué)到好多,也記錄了無(wú)數(shù)未知的詞匯,接下來(lái)要學(xué)的更多。這一周給我最深刻的印象就是:學(xué)弟學(xué)妹們?cè)趺催@么刻苦?早上去得很早,中午不回去午休,晚上還繼續(xù)敲代碼,而且本科大三的學(xué)弟們也很多,在沒(méi)有老師的情況下,小組自發(fā)組織PPT匯報(bào)探討,仿佛我是那個(gè)最“偷懶”的學(xué)生,我猜:肯定是外面太熱,他們都想蹭空調(diào)!

真的很感激這次來(lái)之不易的學(xué)習(xí)機(jī)會(huì),感謝所有的老師、師兄師姐、師弟師妹,更感激家人朋友和女神。也謝謝CSDN認(rèn)識(shí)的博友請(qǐng)我吃飯,武大測(cè)繪本碩博連讀讓我甚是佩服,真的通過(guò)CSDN認(rèn)識(shí)了很多朋友,大家分散五湖四海,共同進(jìn)步。

[Python知識(shí)圖譜] 三.Jieba工具中文分詞、添加自定義詞典及詞性標(biāo)注詳解_第14張圖片

未來(lái)的路還很長(zhǎng),優(yōu)秀的人真的太多,我們只有做好自己,不忘初心,享受生活,砥礪前行。明天周末繼續(xù)奮斗,晚安娜,記得收信

(By:楊秀璋 2019-07-28 周日下午5點(diǎn)寫于武大 https://blog.csdn.net/Eastmount )


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 色婷婷六月桃花综合影院 | 国产日韩亚洲 | 99久久精品国产自免费 | 国产一级毛片外aaaa | 免费福利在线 | 国产精品欧美亚洲韩国日本久久 | 中文字幕在线视频一区 | 老子影院我不卡 | 日本色综合网 | 毛片观看网址 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | 在线观看国产一区二三区 | 全免费a级毛片免费看不卡 全免费a级毛片免费看视频免 | 天天看天天射 | 亚洲一级毛片在线观播放 | 一级特黄aaa大片在线观看 | 成人毛片一区二区三区 | www.色片| 精品免费国产一区二区三区 | 国产特级片 | 国产色婷婷视频在线观看 | 欧美一级毛片国产一级毛片 | 亚洲精品久久麻豆蜜桃 | 五月婷婷激情综合 | 欧美日韩一区二区高清视 | 国产高清免费午夜在线视频 | 日韩视频网 | 888米奇色狠狠俺去啦 | 日本特级全黄一级毛片 | 美日韩视频 | 色欧美亚洲 | 国内精品一级毛片免费看 | 色综合久久久久综合99 | 毛片爱爱 | 9999人体做爰大胆视频 | 夜夜骑日日 | 免费毛片播放 | 精品国产一区二区三区久久影院 | 一级毛片视频播放 | 国产精品久久亚洲一区二区 | 欧美特级大片 |