NLP自然語言 jieba分詞庫

2021-10-17 12:34:40 字數 4541 閱讀 5825

jieba(結巴)是乙個強大的分詞庫,完美支援中文分詞,本文對其基本用法做乙個簡要總結。

1.安裝jieba

pip install jieba

2.簡單用法

結巴分詞分為三種模式:精確模式(預設)、全模式和搜尋引擎模式,下面對這三種模式分別舉例介紹:

(1)精確模式

import jieba s = u'我想和女朋友一起去北京故宮博物院參觀和閒逛。'

cut = jieba.cut(s) print(cut) print(','.join(cut))

#結果:

我,想,和,女朋友,一起,去,北京故宮博物院,參觀,和,閒逛,。

可見分詞結果返回的是乙個生成器(這對大資料量資料的分詞尤為重要)。

(2)全模式

cut=jieba.cut(s,cut_all = true))

print(','.join(cut))

#結果:

我,想,和,女朋友,朋友,一起,去,北京,北京故宮,北京故宮博物院,故宮,故宮博物院,博物,博物院,參觀,和,閒逛,,

可見全模式就是把文字分成盡可能多的詞。

(3)搜尋引擎模式

print('【output】')

s = u'我想和女朋友一起去北京故宮博物院參觀和閒逛。' print(','.join(jieba.cut_for_search(s)))

【output】 我,想,和,朋友,女朋友,一起,去,北京,故宮,博物,博物院,北京故宮博物院,參觀,和,閒逛,。

3.獲取詞性

每個詞都有其詞性,比如名詞、動詞、代詞等,結巴分詞的結果也可以帶上每個詞的詞性,要用到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')] '''

4.並行分詞(windows下不支援)

在文字資料量非常大的時候,為了提高分詞效率,開啟並行分詞就很有必要了。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()

5.獲取出現頻率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'居然是出現頻率最高的詞,還有'乙個'、'沒有'、'這個'等這種我們並不想要的無實際意義的詞,那麼就可以根據前面說的詞性來進行過濾。

6.使用使用者字典提高分詞準確性

不使用使用者字典的分詞結果:

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

使用者字典每行乙個詞,格式為:

詞語 詞頻 詞性

其中詞頻是乙個數字,詞性為自定義的詞性,要注意的是詞頻數字和空格都要是半形的。

jieba為自然語言語言中常用工具包,jieba具有對分詞的詞性進行標註的功能,詞性類別如下:

ag形語素

形容詞性語素。形容詞**為 a,語素**g前面置以a。

a形容詞

取英語形容詞 adjective的第1個字母。

ad副形詞

直接作狀語的形容詞。形容詞** a和副詞**d並在一起。

an名形詞

具有名詞功能的形容詞。形容詞** a和名詞**n並在一起。

b區別詞

取漢字「別」的聲母。c連詞

取英語連詞 conjunction的第1個字母。

dg副語素

副詞性語素。副詞**為 d,語素**g前面置以d。d副詞

取 adverb的第2個字母,因其第1個字母已用於形容詞。e嘆詞

取英語嘆詞 exclamation的第1個字母。

f方位詞

取漢字「方」g語素

絕大多數語素都能作為合成詞的「詞根」,取漢字「根」的聲母。

h前接成分

取英語 head的第1個字母。i成語

取英語成語 idiom的第1個字母。

j簡稱略語

取漢字「簡」的聲母。

k後接成分

l習用語

習用語尚未成為成語,有點「臨時性」,取「臨」的聲母。m數詞

取英語 numeral的第3個字母,n,u已有他用。

ng名語素

名詞性語素。名詞**為 n,語素**g前面置以n。n名詞

取英語名詞 noun的第1個字母。

nr人名

名詞** n和「人(ren)」的聲母並在一起。

ns地名

名詞** n和處所詞**s並在一起。

nt機構團體

「團」的聲母為 t,名詞**n和t並在一起。

nz其他專名

「專」的聲母的第 1個字母為z,名詞**n和z並在一起。

o擬聲詞

取英語擬聲詞 onomatopoeia的第1個字母。p介詞

取英語介詞 prepositional的第1個字母。q量詞

取英語 quantity的第1個字母。r代詞

取英語代詞 pronoun的第2個字母,因p已用於介詞。

s處所詞

取英語 space的第1個字母。

tg時語素

時間詞性語素。時間詞**為 t,在語素的**g前面置以t。

t時間詞

取英語 time的第1個字母。u助詞

取英語助詞 auxiliary

vg動語素

動詞性語素。動詞**為 v。在語素的**g前面置以v。v動詞

取英語動詞 verb的第乙個字母。

vd副動詞

直接作狀語的動詞。動詞和副詞的**並在一起。

vn名動詞

指具有名詞功能的動詞。動詞和名詞的**並在一起。

w標點符號

x非語素字

非語素字只是乙個符號,字母 x通常用於代表未知數、符號。

y語氣詞

取漢字「語」的聲母。

z狀態詞

取漢字「狀」的聲母的前乙個字母。

un未知詞

不可識別詞及使用者自定義詞組。取英文unkonwn首兩個字母。(非北大標準,csw分詞中定義)

jieba分詞快速入門 自然語言處理

結巴 中文分詞 做最好的python中文分詞元件 jieba 支援繁體分詞 支援自定義詞典 示例 分詞 encoding utf 8 import jieba seg list jieba.cut 我來到北京清華大學 cut all true print full mode join seg lis...

自然語言中最好中文分詞 jieba

美圖欣賞 一.jieba介紹 結巴 中文分詞 做最好的python中文分詞元件 jieba 中文為 to stutter 中文文字分割 內建為最好的python中文單詞分割模組。二.jieba特徵支援典型分詞模式 精確模式,試圖將句子最精確地切開,適合文字分析 全模式,把句子中所有的可以成詞的短語都...

NLP自然語言處理

第1部分自然語言處理入門 1.1自然語言處理入門.mp4 第2部分hmm和crf 1.1crf模型簡介.mp4 1.1hmm模型介紹.mp4 1.2文字處理的基本方法 part1.mp4 2.1新聞主題分類任務 第4步 part2.mp4 第43部分rnn 1.1rnn模型小結.mp4 1.1rnn...