1. 程式人生 > >jieba--做最好用的中文分片語件詳解【2】

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 狀態詞