溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中jieba分詞是什么

發(fā)布時間:2020-09-24 09:35:02 來源:億速云 閱讀:324 作者:Leah 欄目:編程語言

Python中jieba分詞是什么?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.jieba分詞的安裝 

直接在cmd窗口當中pip install即可

2.jieba分詞的介紹

jieba分詞是目前比較好的中文分詞組件之一,jieba分詞支持三種模式的分詞(精確模式、全模式、搜索引擎模式),并且支持自定義詞典(這一點在特定的領域很重要,有時候需要根據(jù)領域的需要來添加特定的詞典以提高分詞結(jié)果的質(zhì)量)、支持繁體字分詞。

3.jieba分詞三種分詞模式及使用例子

jieba分詞模塊的主要方法是jieba.cut(),精確模式和全模式的區(qū)別主要在于其中的參數(shù)不同

(1)精確模式:將文本精確地切開,適用于文本分析

jieba.cut()方法里面的CUT_ALL=False

(2)全模式:將文本里面所有可以成詞的詞語全部提取出來,速度較快,但是不能解決歧義的問題

 jieba.cut()方法里面的CUT_ALL=True

(3)搜索引擎模式:在精確模式的基礎上,將長詞再次切分,供搜索使用

需要調(diào)用jieba.cut_for_search()方法

僅僅是看這些東西,看不出個所以然來,接下來對三種分詞的模式進行測試:

text='北京郵電大學是教育部直屬、工業(yè)和信息化部共建、首批進行“211工程”建設的全國重點大學'
try_words=jieba.cut(text,cut_all=True)
print ('全模式分詞結(jié)果:'+','.join(try_words))
try_words=jieba.cut(text,cut_all=False)
print ('精確模式分詞結(jié)果:'+','.join(try_words))
try_words=jieba.cut_for_search(text)
print ('搜素引擎模式分詞結(jié)果:'+','.join(try_words))

上述代碼運行結(jié)果:

全模式分詞結(jié)果:北京,北京郵電,北京郵電大學,郵電,郵電大學,電大,大學,是,教育,教育部,直屬,,,工業(yè),和,信息,信息化,部,
共建,,,首批,進行,,211,工程,,,建設,的,全國,重點,大學
精確模式分詞結(jié)果:北京郵電大學,是,教育部,直屬,、,工業(yè),和,信息化,部,共建,、,首批,進行,“,211,工程,”,建設,的,全國,重點,
大學
搜素引擎模式分詞結(jié)果:北京,郵電,電大,大學,北京郵電大學,是,教育,教育部,直屬,、,工業(yè),和,信息,信息化,部,共建,、,首批,進行,
“,211,工程,”,建設,的,全國,重點,大學

分析上述代碼得到的結(jié)果,我們看出全模式分詞是將文本當中所有的詞都提取出來,提詞的窗口是允許重疊和包含的,詞語當中的字眼可以出現(xiàn)多次,但是這種分詞模式有可能會出現(xiàn)歧義;精確模式分詞是將文本精確地分隔開,成詞較長的優(yōu)先,不存在成詞窗口的重疊與重復的情況,這種分詞模式出現(xiàn)歧義的概率比較小,但是有可能會出現(xiàn)分詞窗口過大,某些重點詞不會單獨出現(xiàn)在結(jié)果當中的情況。綜上所述,這兩種模式的分詞適用于不同的情景,應當酌情選擇。

值得一提的是,這個例子當中的“工業(yè)和信息化部”也應當是一個獨立的名詞,但是這三種分詞方法當中都沒有出現(xiàn)這個詞語,這就需要人工添加詞庫來實現(xiàn),放在下一部分。

再對文本當中可能出現(xiàn)的歧義情況進行嘗試:

text2='南京市長江大橋是一座大橋'
try_words=jieba.cut(text2,cut_all=True)
print ('全模式分詞結(jié)果:'+','.join(try_words))
try_words=jieba.cut(text2,cut_all=False)
print ('精確模式分詞結(jié)果:'+','.join(try_words))
try_words=jieba.cut_for_search(text2)
print ('搜索引擎模式分詞結(jié)果:'+','.join(try_words))

這個例子當中的文本為“南京市長江大橋是一座大橋”,我們希望提取出來的分詞結(jié)果應當為:“南京市長江大橋”,或者說,最次也應該是“南京市”和“長江大橋”兩個詞語,上述代碼的運行結(jié)果為:

全模式分詞結(jié)果:南京,南京市,京市,市長,長江,長江大橋,大橋,是,一座,大橋
精確模式分詞結(jié)果:南京市,長江大橋,是,一座,大橋
搜索引擎模式分詞結(jié)果:南京,京市,南京市,長江,大橋,長江大橋,是,一座,大橋

分析結(jié)果:三種模式當中都沒有出現(xiàn)我們的最佳預期(南京市長江大橋),反而在全模式和搜索引擎模式下的分詞結(jié)果當中出現(xiàn)了歧義詞(市長、京市),這跟我們的語境顯然是無關的,這也恰好反映了全模式和搜索引擎模式分詞的一個缺陷,也就是容易出現(xiàn)與語境無關的歧義詞,而精確模式出現(xiàn)的比較少。

至于為什么會出現(xiàn)上述情況,我在查閱相關資料之后,認為原因如下:

中文分詞的方法大致可以分為三類:

基于字典、詞庫匹配的分詞方法;基于詞頻度統(tǒng)計的分詞方法和基于知識理解的分詞方法(另外還有逐詞遍歷法,但是因為不論文本有多么短,詞庫多么大都要逐詞遍歷一遍,效率過低,所以說大部分情況不予采用)。一般的中文分詞模塊使用基于字典、詞庫的分詞方法,全模式使用的策略為(設詞典中最長詞的長度為n):從字段的第一個字符開始,向后讀取1,2,...n個字符,并且到詞典當中去對應,如果能對應上,就將其取出來,這樣就可以達到將所有可以成詞的字段提取出來(并且有重復部分)的目的;而相應的,精確模式的分詞策略則可能是盡可能將取詞窗口擴大,也就是在可能含有重復的長度從1到n的這些詞中,取最長的一個輸出。

(上述的“原因”只是我在使用分詞模塊的各個模式時的一點個人看法,不一定正確,對于項目也沒有什么影響,畢竟我也沒有去專門研究過源碼。。。)

4.jieba分詞添加自定義的詞典

中文分詞常常用于許多特定的語境,相應的也就需要添加一些特定語境下的詞典,比如上一部分的“南京市長江大橋”就屬于“地標建筑”之類的詞典,如果分詞將其分為“南京市”和“長江大橋”就有可能不能完全反映出原文本的重點(畢竟南京市的東西很多,長江大橋也不止南京市有),這種時候我們就需要添加自定義的詞典來提高分詞的質(zhì)量。

jieba.add_word('工業(yè)和信息化部')

使用jieba模塊的add_word()方法即可對其加入新的詞,插入之后的分詞結(jié)果如下:

全模式分詞結(jié)果:北京,北京郵電,北京郵電大學,郵電,郵電大學,電大,大學,是,教育,教育部,直屬,,,工業(yè),工業(yè)和信息化部,信息,
信息化,部,共建,,,首批,進行,,211,工程,,,建設,的,全國,
重點,大學
精確模式分詞結(jié)果:北京郵電大學,是,教育部,直屬,、,工業(yè)和信息化部,共建,、,首批,進行,“,211,工程,”,建設,的,全國,重點,
大學
搜素引擎模式分詞結(jié)果:北京,郵電,電大,大學,北京郵電大學,是,教育,教育部,直屬,、,工業(yè),信息,信息化,工業(yè)和信息化部,共建,、
,首批,進行“,211,工程,”,建設,的,全國,重點,大學
全模式分詞結(jié)果:南京,南京市,南京市長江大橋,京市,市長,長江,長江大橋,大橋,是,一座,大橋
精確模式分詞結(jié)果:南京市長江大橋,是,一座,大橋
搜索引擎模式分詞結(jié)果:南京,京市,市長,長江,大橋,南京市,南京市長江大橋,是,一座,大橋

主要的改變在于全模式和搜索引擎模式直接加入了這個詞,而精確模式則是將新加詞的子集詞(姑且這么稱呼)取代了,這也符合上一部分的假設。

看完上述內(nèi)容,你們掌握Python中jieba分詞是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI