jieba結巴分詞庫
jieba(結巴)是一個強大的分詞庫,完美支持中文分詞,本文對其基本用法做一個簡要總結。
安裝jieba
pip install jieba
簡單用法
結巴分詞分為三種模式:精確模式(默認)、全模式和搜索引擎模式,下面對這三種模式分別舉例介紹:
精確模式
import jieba
s = u'我想和女朋友一起去北京故宮博物院參觀和閑逛。'
cut = jieba.cut(s)
print '【Output】'
print cut
print ','.join(cut)
【Output】
<generator object cut at 0x7f8dbc0efc30>
我,想,和,女朋友,一起,去,北京故宮博物院,參觀,和,閑逛,。
可見分詞結果返回的是一個生成器(這對大數據量數據的分詞尤為重要)。
全模式
print '【Output】'
print ','.join(jieba.cut(s,cut_all = True))
【Output】
我,想,和,女朋友,朋友,一起,去,北京,北京故宮,北京故宮博物院,故宮,故宮博物院,博物,博物院,參觀,和,閑逛,,
可見全模式就是把文本分成盡可能多的詞。
搜索引擎模式
print '【Output】'
print ','.join(jieba.cut_for_search(s))
【Output】
我,想,和,朋友,女朋友,一起,去,北京,故宮,博物,博物院,北京故宮博物院,參觀,和,閑逛,。
獲取詞性
每個詞都有其詞性,比如名詞、動詞、代詞等,結巴分詞的結果也可以帶上每個詞的詞性,要用到jieba.posseg,舉例如下:
import jieba.posseg as psg
print '【Output】'
print [(x.word,x.flag) for x in psg.cut(s)]
# 輸出:
'''
[(u'我', u'r'), (u'想', u'v'), (u'和', u'c'), (u'女朋友', u'n'), (u'一起', u'm'),
(u'去', u'v'), (u'北京故宮博物院', u'ns'), (u'參觀', u'n'), (u'和', u'c'), (u'閑逛', u'v'), (u'。', u'x')]
'''
可以看到成功獲取到每個詞的詞性,這對於我們對分詞結果做進一步處理很有幫助,比如只想獲取分詞結果列表中的名詞,那么就可以這樣過濾:
print [(x.word,x.flag) for x in psg.cut(s) if x.flag.startswith('n')]
# 輸出:
'''
[(u'女朋友', u'n'), (u'北京故宮博物院', u'ns'), (u'參觀', u'n')]
'''
至於詞性的每個字母分別表示什么詞性,jieba分詞的結果可能有哪些詞性,就要去查閱詞性對照表了,本文結尾附了一份從網上搜到的詞性對照表,想了解更詳細的詞性分類信息,可以到網上搜索"結巴分詞詞性對照"。
並行分詞
在文本數據量非常大的時候,為了提高分詞效率,開啟並行分詞就很有必要了。jieba支持並行分詞,基於python自帶的multiprocessing模塊,但要注意的是在Windows環境下不支持。
用法:
# 開啟並行分詞模式,參數為並發執行的進程數
jieba.enable_parallel(5)
# 關閉並行分詞模式
jieba.disable_parallel()
舉例:開啟並行分詞模式對三體全集文本進行分詞
santi_text = open('./santi.txt').read()
print len(santi_text)
2681968
可以看到三體全集的數據量還是非常大的,有260多萬字節的長度。
jieba.enable_parallel(100)
santi_words = [x for x in jieba.cut(santi_text) if len(x) >= 2]
jieba.disable_parallel()
獲取出現頻率Top n的詞
還是以上面的三體全集文本為例,假如想要獲取分詞結果中出現頻率前20的詞列表,可以這樣獲取:
from collections import Counter
c = Counter(santi_words).most_common(20)
print c
# 輸出:
'''
[(u'\r\n', 21805), (u'一個', 3057), (u'沒有', 2128), (u'他們', 1690), (u'我們', 1550),
(u'這個', 1357), (u'自己', 1347), (u'程心', 1320), (u'現在', 1273), (u'已經', 1259),
(u'世界', 1243), (u'羅輯', 1189), (u'可能', 1177), (u'什么', 1176), (u'看到', 1114),
(u'知道', 1094), (u'地球', 951), (u'人類', 935), (u'太空', 930), (u'三體', 883)]
'''
可以看到結果中'\r\n'居然是出現頻率最高的詞,還有'一個'、'沒有'、'這個'等這種我們並不想要的無實際意義的詞,那么就可以根據前面說的詞性來進行過濾,這個以后細講。
使用用戶字典提高分詞准確性
不使用用戶字典的分詞結果:
txt = u'歐陽建國是創新辦主任也是歡聚時代公司雲計算方面的專家'
print ','.join(jieba.cut(txt))
歐陽,建國,是,創新,辦,主任,也,是,歡聚,時代,公司,雲,計算,方面,的,專家
使用用戶字典的分詞結果:
jieba.load_userdict('user_dict.txt')
print ','.join(jieba.cut(txt))
歐陽建國,是,創新辦,主任,也,是,歡聚時代,公司,雲計算,方面,的,專家
可以看出使用用戶字典后分詞准確性大大提高。
注:其中user_dict.txt的內容如下:
歐陽建國 5
創新辦 5 i
歡聚時代 5
雲計算 5
用戶字典每行一個詞,格式為:
詞語 詞頻 詞性
其中詞頻是一個數字,詞性為自定義的詞性,要注意的是詞頻數字和空格都要是半角的。
附:結巴分詞詞性對照表
- 按詞性英文首字母排序
形容詞
類型 | 二級類型 | 標簽 | 解釋 |
---|---|---|---|
形容詞 | 一類 | a | 形容詞 |
形容詞 | 二類 | a | 形容詞 |
形容詞 | 二類 | ad | 副形詞 |
形容詞 | 二類 | an | 名形詞 |
形容詞 | 二類 | ag | 形容詞性語素 |
形容詞 | 二類 | al | 形容詞性慣用語 |
區別詞 | 一類 | b | 區別詞 |
區別詞 | 二類 | bl | 區別詞性慣用語 |
名詞
類型 | 二級類型 | 標簽 | 解釋 |
---|---|---|---|
名詞 | 一類 | n | 名詞 |
名詞 | 二類 | nr | 人名 |
名詞 | 三類 | nr1 | 漢語姓氏 |
名詞 | 三類 | nr2 | 漢語名字 |
名詞 | 三類 | nrj | 日語人名 |
名詞 | 三類 | nrf | 音譯人名 |
名詞 | 二類 | ns | 地名 |
名詞 | 三類 | nsf | 音譯地名 |
名詞 | 二類 | nt | 機構團體名 |
名詞 | 二類 | nz | 其它專名 |
名詞 | 二類 | nl | 名詞性慣用語 |
名詞 | 二類 | ng | 名詞性語素 |
代詞(1個一類,4個二類,6個三類)
標簽 | 解釋 |
---|---|
r | 代詞 |
rr | 人稱代詞 |
rz | 指示代詞 |
rzt | 時間指示代詞 |
rzs | 處所指示代詞 |
rzv | 謂詞性指示代詞 |
ry | 疑問代詞 |
ryt | 時間疑問代詞 |
rys | 處所疑問代詞 |
ryv | 謂詞性疑問代詞 |
rg | 代詞性語素 |
助詞(1個一類,15個二類)
標簽 | 解釋 |
---|---|
u | 助詞 |
uzhe | 着 |
ule | 了 嘍 |
uguo | 過 |
ude1 | 的 底 |
ude2 | 地 |
ude3 | 得 |
usuo | 所 |
udeng | 等 等等 雲雲 |
uyy | 一樣 一般 似的 般 |
udh | 的話 |
uls | 來講 來說 而言 說來 |
uzhi | 之 |
ulian | 連 (“連小學生都會”) |
動詞(1個一類,9個二類)
標簽 | 解釋 |
---|---|
v | 動詞 |
vd | 副動詞 |
vn | 名動詞 |
vshi | 動詞“是” |
vyou | 動詞“有” |
vf | 趨向動詞 |
vx | 形式動詞 |
vi | 不及物動詞(內動詞) |
vl | 動詞性慣用語 |
vg | 動詞性語素 |
標點符號(1個一類,16個二類)
標簽 | 解釋 |
---|---|
w | 標點符號 |
wkz | 左括號,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { < |
wky | 右括號,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { > |
wyz | 左引號,全角:“ ‘ 『 |
wyy | 右引號,全角:” ’ 』 |
wj | 句號,全角:。 |
ww | 問號,全角:? 半角:? |
wt | 嘆號,全角:! 半角:! |
wd | 逗號,全角:, 半角:, |
wf | 分號,全角:; 半角: ; |
wn | 頓號,全角:、 |
wm | 冒號,全角:: 半角: : |
ws | 省略號,全角:…… … |
wp | 破折號,全角:—— -- ——- 半角:--- ---- |
wb | 百分號千分號,全角:% ‰ 半角:% |
wh | 單位符號,全角:¥ $ £ ° ℃ 半角:$ |
其它
類型 | 二級類型 | 標簽 | 解釋 |
---|---|---|---|
連詞 | 一類 | c | 連詞 |
連詞 | 二類 | cc | 並列連詞 |
副詞 | 一類 | d | 副詞 |
嘆詞 | 一類 | e | 嘆詞 |
| 方位詞|一類|f |方位詞
| 前綴|一類)|h |前綴|
| 后綴|一類|k 后綴|
| 數詞|一類,1個二類|
| 數詞|一類|m |數詞|
| 數詞|二類|mq |數量詞|
擬聲詞(1個一類)
標簽 | 解釋 |
---|---|
o | 擬聲詞 |
介詞(1個一類,2個二類)
|p |介詞|
|pba |介詞“把”|
|pbe|i 介詞“被”|
量詞(1個一類,2個二類)
標簽 | 解釋 |
---|---|
q | 量詞 |
qv | 動量詞 |
qt | 時量詞 |
字符串(1個一類,2個二類)
標簽 | 解釋 |
---|---|
x | 字符串 |
xx | 非語素字 |
xu | 網址URL |
語氣詞(1個一類)
標簽 | 解釋 |
---|---|
y | 語氣詞(delete yg) |
狀態詞(1個一類)
標簽 | 解釋 |
---|---|
z | 狀態詞 |
處所詞(1個一類)
標簽 | 解釋 |
---|---|
s | 處所詞 |
時間詞(1個一類,1個二類)
標簽 | 解釋 |
---|---|
t | 時間詞 |
tg | 時間詞性語素 |