jieba--做最好用的中文分片語件詳解【2】
寫在最前面:
今天有時間,再講一講jieba分詞的詞典。
載入詞典:
首先,這是原來的分詞方式及其結果:
- 開發者可以指定自己自定義的詞典,以便包含 jieba 詞庫裡沒有的詞。雖然 jieba 有新詞識別能力,但是自行新增新詞可以保證更高的正確率
import jieba test_sent = ( "李小福是創新辦主任也是雲端計算方面的專家\n" "什麼是八一雙鹿\n" "例如我輸入一個帶“韓玉賞鑑”的標題,在自定義詞庫中也增加了此詞為N類\n" "「臺中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。" ) words = jieba.cut(test_sent) print("/ ".join(words))
李小福/ 是/ 創新/ 辦/ 主任/ 也/ 是/ 雲/ 計算/ 方面/ 的/ 專家/
/ 什麼/ 是/ 八/ 一雙/ 鹿/
/ 例如/ 我/ 輸入/ 一個/ 帶/ “/ 韓玉/ 賞鑑/ ”/ 的/ 標題/ ,/ 在/ 自定義詞/ 庫中/ 也/ 增加/ 了/ 此/ 詞為/ N/ 類/
/ 「/ 臺/ 中/ 」/ 正確/ 應該/ 不會/ 被/ 切開/ 。/ mac/ 上/ 可/ 分出/ 「/ 石墨/ 烯/ 」/ ;/ 此時/ 又/ 可以/ 分出/ 來凱/ 特琳/ 了/ 。
加入自定義字典
雲端計算 5
李小福 2 nr
創新辦 3 i
easy_install 3 eng
好用 300
韓玉賞鑑 3 nz
八一雙鹿 3 nz
臺中
凱特琳 nz
Edu Trust認證 2000
載入自定義字典
jieba.load_userdict("userdict.txt")
李小福/ 是/ 創新辦/ 主任/ 也/ 是/ 雲端計算/ 方面/ 的/ 專家/
/ 什麼/ 是/ 八一雙鹿/
/ 例如/ 我/ 輸入/ 一個/ 帶/ “/ 韓玉賞鑑/ ”/ 的/ 標題/ ,/ 在/ 自定義詞/ 庫中/ 也/ 增加/ 了/ 此/ 詞為/ N/ 類/
/ 「/ 臺中/ 」/ 正確/ 應該/ 不會/ 被/ 切開/ 。/ mac/ 上/ 可/ 分出/ 「/ 石墨/ 烯/ 」/ ;/ 此時/ 又/ 可以/ 分出/ 來/ 凱特琳/ 了/ 。
那麼這個自定義字典是如何定義的呢?
- 一個詞佔一行;
- 每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒;
file_name
若為路徑或二進位制方式開啟的檔案,則檔案必須為 UTF-8 編碼
文末附詞性表
調整詞典
-
使用
add_word(word, freq=None, tag=None)
del_word(word)
可在程式中動態修改詞典。 -
使用
suggest_freq(segment, tune=True)
可調節單個詞語的詞頻,使其能(或不能)被分出來。 -
注意:自動計算的詞頻在使用 HMM 新詞發現功能時可能無效。
使用 suggest_freq(segment, tune=True)
調節單個詞語的詞頻
import jieba
jieba.load_userdict("userdict.txt")
test_sent = (
"李小福是創新辦主任也是雲端計算方面的專家\n"
"什麼是八一雙鹿\n"
"例如我輸入一個帶“韓玉賞鑑”的標題,在自定義詞庫中也增加了此詞為N類\n"
"「臺中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
words = jieba.cut(test_sent)
jieba.suggest_freq(('雲','計算'),True)
jieba.suggest_freq(('八一','雙鹿'),True)
print("/ ".join(words))
李小福/ 是/ 創新辦/ 主任/ 也/ 是/ 雲/ 計算/ 方面/ 的/ 專家/
/ 什麼/ 是/ 八/ 一雙/ 鹿/
/ 例如/ 我/ 輸入/ 一個/ 帶/ “/ 韓玉賞鑑/ ”/ 的/ 標題/ ,/ 在/ 自定義詞/ 庫中/ 也/ 增加/ 了/ 此/ 詞為/ N/ 類/
/ 「/ 臺中/ 」/ 正確/ 應該/ 不會/ 被/ 切開/ 。/ mac/ 上/ 可/ 分出/ 「/ 石墨/ 烯/ 」/ ;/ 此時/ 又/ 可以/ 分出/ 來/ 凱特琳/ 了/ 。
我們可以看到與計算、八一雙鹿被手動分開了
使用 add_word(word, freq=None, tag=None)
和 del_word(word)
可在程式中動態修改詞典
import jieba
jieba.load_userdict("userdict.txt")
test_sent = (
"李小福是創新辦主任也是雲端計算和石墨烯方面的專家\n"
"什麼是八一雙鹿\n"
"例如我輸入一個帶“韓玉賞鑑”的標題,在自定義詞庫中也增加了此詞為N類\n"
"「臺中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
words = jieba.cut(test_sent)
print("/ ".join(words))
李小福/ 是/ 創新辦/ 主任/ 也/ 是/ 雲端計算/ 和/ 石墨/ 烯/ 方面/ 的/ 專家/
/ 什麼/ 是/ 八一雙鹿/
/ 例如/ 我/ 輸入/ 一個/ 帶/ “/ 韓玉賞鑑/ ”/ 的/ 標題/ ,/ 在/ 自定義/ 詞庫/ 中/ 也/ 增加/ 了/ 此/ 詞為/ N/ 類/
/ 「/ 臺中/ 」/ 正確/ 應該/ 不會/ 被/ 切開/ 。/ mac/ 上/ 可/ 分出/ 「/ 石墨/ 烯/ 」/ ;/ 此時/ 又/ 可以/ 分出/ 來/ 凱特琳/ 了/ 。
可以看到,我自定義的字典裡沒有石墨烯的詞,所以石墨烯沒有被正確識別出來,然後我加入石墨烯。
import jieba
jieba.load_userdict("userdict.txt")
test_sent = (
"李小福是創新辦主任也是雲端計算和石墨烯方面的專家\n"
"什麼是八一雙鹿\n"
"例如我輸入一個帶“韓玉賞鑑”的標題,在自定義詞庫中也增加了此詞為N類\n"
"「臺中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
jieba.add_word('石墨烯')
words = jieba.cut(test_sent)
print("/ ".join(words))
然後石墨烯被正確識別出來了
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 狀態詞