jieba(結巴)是一個強大的分詞庫,完美支持中文分詞,本文對其基本用法做一個簡要總結。
特點
-
支持三種分詞模式:
- 精確模式,試圖將句子最精確地切開,適合文本分析;
- 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
- 搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
- 支持繁體分詞
- 支持自定義詞典
- MIT 授權協議
安裝jieba
1
|
pip install jieba |
簡單用法
結巴分詞分為三種模式:精確模式(默認)、全模式和搜索引擎模式,下面對這三種模式分別舉例介紹:
精確模式
1
2
|
import jieba s = u '我想和女朋友一起去北京故宮博物院參觀和閑逛。' |
1
2
3
4
5
|
cut = jieba.cut(s) print '【Output】' print cut print ',' .join(cut) |
1
2
3
|
【Output】 <generator object cut at 0x7f8dbc0efc30> 我,想,和,女朋友,一起,去,北京故宮博物院,參觀,和,閑逛,。 |
可見分詞結果返回的是一個生成器(這對大數據量數據的分詞尤為重要)。
全模式
1
2
|
print '【Output】' print ','.join(jieba.cut(s,cut_all = True)) |
1
2
|
【Output】 我,想,和,女朋友,朋友,一起,去,北京,北京故宮,北京故宮博物院,故宮,故宮博物院,博物,博物院,參觀,和,閑逛,, |
可見全模式就是把文本分成盡可能多的詞。
搜索引擎模式
1
2
|
print '【Output】' print ',' .join(jieba.cut_for_search(s)) |
1
2
|
【Output】 我,想,和,朋友,女朋友,一起,去,北京,故宮,博物,博物院,北京故宮博物院,參觀,和,閑逛,。 |
獲取詞性
每個詞都有其詞性,比如名詞、動詞、代詞等,結巴分詞的結果也可以帶上每個詞的詞性,要用到jieba.posseg,舉例如下:
1
2
3
4
5
6
7
8
9
|
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')] ''' |
可以看到成功獲取到每個詞的詞性,這對于我們對分詞結果做進一步處理很有幫助,比如只想獲取分詞結果列表中的名詞,那么就可以這樣過濾:
1
2
3
4
5
6
|
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環境下不支持。
用法:
1
2
3
4
5
|
# 開啟并行分詞模式,參數為并發執行的進程數 jieba.enable_parallel( 5 ) # 關閉并行分詞模式 jieba.disable_parallel() |
舉例:開啟并行分詞模式對三體全集文本進行分詞
1
2
|
santi_text = open ( './santi.txt' ).read() print len (santi_text) |
2681968
可以看到三體全集的數據量還是非常大的,有260多萬字節的長度。
1
2
3
|
jieba.enable_parallel( 100 ) santi_words = [x for x in jieba.cut(santi_text) if len (x) > = 2 ] jieba.disable_parallel() |
獲取出現頻率Top n的詞
還是以上面的三體全集文本為例,假如想要獲取分詞結果中出現頻率前20的詞列表,可以這樣獲取:
1
2
3
4
5
6
7
8
9
10
11
|
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'居然是出現頻率最高的詞,還有'一個'、'沒有'、'這個'等這種我們并不想要的無實際意義的詞,那么就可以根據前面說的詞性來進行過濾,這個以后細講。
使用用戶字典提高分詞準確性
不使用用戶字典的分詞結果:
1
2
|
txt = u '歐陽建國是創新辦主任也是歡聚時代公司云計算方面的專家' print ',' .join(jieba.cut(txt)) |
歐陽,建國,是,創新,辦,主任,也,是,歡聚,時代,公司,云,計算,方面,的,專家
使用用戶字典的分詞結果:
1
2
|
jieba.load_userdict( 'user_dict.txt' ) print ',' .join(jieba.cut(txt)) |
歐陽建國,是,創新辦,主任,也,是,歡聚時代,公司,云計算,方面,的,專家
可以看出使用用戶字典后分詞準確性大大提高。
注:其中user_dict.txt的內容如下:
歐陽建國 5
創新辦 5 i
歡聚時代 5
云計算 5
用戶字典每行一個詞,格式為:
詞語 詞頻 詞性
其中詞頻是一個數字,詞性為自定義的詞性,要注意的是詞頻數字和空格都要是半角的。
附:結巴分詞詞性對照表(按詞性英文首字母排序)
形容詞(1個一類,4個二類)
a 形容詞
ad 副形詞
an 名形詞
ag 形容詞性語素
al 形容詞性慣用語
區別詞(1個一類,2個二類)
b 區別詞
bl 區別詞性慣用語
連詞(1個一類,1個二類)
c 連詞
cc 并列連詞
副詞(1個一類)
d 副詞
嘆詞(1個一類)
e 嘆詞
方位詞(1個一類)
f 方位詞
前綴(1個一類)
h 前綴
后綴(1個一類)
k 后綴
數詞(1個一類,1個二類)
m 數詞
mq 數量詞
名詞 (1個一類,7個二類,5個三類)
名詞分為以下子類:
n 名詞
nr 人名
nr1 漢語姓氏
nr2 漢語名字
nrj 日語人名
nrf 音譯人名
ns 地名
nsf 音譯地名
nt 機構團體名
nz 其它專名
nl 名詞性慣用語
ng 名詞性語素
擬聲詞(1個一類)
o 擬聲詞
介詞(1個一類,2個二類)
p 介詞
pba 介詞“把”
pbei 介詞“被”
量詞(1個一類,2個二類)
q 量詞
qv 動量詞
qt 時量詞
代詞(1個一類,4個二類,6個三類)
r 代詞
rr 人稱代詞
rz 指示代詞
rzt 時間指示代詞
rzs 處所指示代詞
rzv 謂詞性指示代詞
ry 疑問代詞
ryt 時間疑問代詞
rys 處所疑問代詞
ryv 謂詞性疑問代詞
rg 代詞性語素
處所詞(1個一類)
s 處所詞
時間詞(1個一類,1個二類)
t 時間詞
tg 時間詞性語素
助詞(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 單位符號,全角:¥ $ £ ° ℃ 半角:$
字符串(1個一類,2個二類)
x 字符串
xx 非語素字
xu 網址URL
語氣詞(1個一類)
y 語氣詞(delete yg)
狀態詞(1個一類)
z 狀態詞
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/jiayongji/p/7119065.html