jieba 分詞使用入門

2022-08-24 20:54:09 字數 3583 閱讀 6111

1. 介紹

jieba 是目前最好的 python 中文分詞元件,它主要有以下 3 種特性:

import

jieba

import

jieba.posseg as pseg

import jieba.analyse as anls

2. 分詞

可使用jieba.cutjieba.cut_for_search方法進行分詞,兩者所返回的結構都是乙個可迭代的 generator,可使用 for 迴圈來獲得分詞後得到的每乙個詞語(unicode),或者直接使用jieba.lcut以及jieba.lcut_for_search直接返回 list。其中:

jieba.cut_for_searchjieba.lcut_for_search接受 2 個引數:

2.1 全模式和精確模式

#

全模式seg_list = jieba.cut("

他來到上海交通大學

", cut_all=true)

print("

【全模式】:

" + "

/ ".join(seg_list))

#

精確模式

seg_list = jieba.cut("

他來到上海交通大學

", cut_all=false)

print("

【精確模式】:

" + "

/ ".join(seg_list))

2.2 搜尋引擎模式

#

搜尋引擎模式

seg_list = jieba.cut_for_search("

他畢業於上海交通大學機電系,後來在一機部上海電器科學研究所工作

")

print("

【搜尋引擎模式】:

" + "

/ ".join(seg_list))

2.3 hmm模型

hmm 模型,即隱馬爾可夫模型(hidden markov model, hmm),是一種基於概率的統計分析模型,用來描述乙個系統隱性狀態的轉移和隱性狀態的表現概率。在 jieba 中,對於未登入到詞庫的詞,使用了基於漢字成詞能力的 hmm 模型和 viterbi 演算法,其大致原理是:

#

未啟用 hmm

seg_list = jieba.cut("

他來到了網易杭研大廈

", hmm=false) #

預設精確模式和啟用 hmm

print("

【未啟用 hmm】:

" + "/ "

.join(seg_list))

【未啟用 hmm】:他/ 來到/ 了/ 網易/ 杭/ 研/大廈

#識別新詞

seg_list = jieba.cut("

他來到了網易杭研大廈

") #

預設精確模式和啟用 hmm

print("

【識別新詞】:

" + "/ "

.join(seg_list))

【識別新詞】:他/ 來到/ 了/ 網易/ 杭研/ 大廈

3 新增自定義字典

3.1 載入字典

使用jieba.load_userdict(file_name)即可載入詞典。

#

示例文字

sample_text = "

周大福是創新辦主任也是雲計算方面的專家"#

未載入詞典

print("

【未載入詞典】:

" + '/ '

.join(jieba.cut(sample_text)))

【未載入詞典】:周大福/ 是/ 創新/ 辦/ 主任/ 也/ 是/ 雲/ 計算/ 方面/ 的/專家

#載入詞典

jieba.load_userdict("

userdict.txt")

#載入詞典後

print("

【載入詞典後】:

" + '/ '

.join(jieba.cut(sample_text)))

【載入詞典後】:周大福/ 是/ 創新辦/ 主任/ 也/ 是/ 雲計算/ 方面/ 的/ 專家

3.2 調整字典

使用add_word(word, freq=none, tag=none)del_word(word)可在程式中動態修改詞典。

jieba.add_word('

石墨烯') #

增加自定義詞語

jieba.add_word('

凱特琳', freq=42, tag='

nz') #

設定詞頻和詞性

jieba.del_word('

自定義詞

') #

刪除自定義詞語

使用suggest_freq(segment, tune=true)可調節單個詞語的詞頻,使其能(或不能)被分出來。

#

調節詞頻前

print("

【調節詞頻前】:

" + '

/'.join(jieba.cut('

如果放到post中將出錯。

', hmm=false)))

4.2 基於text-rank

4.3 自定義語料庫

5 詞性標註

jieba.posseg.postokenizer(tokenizer=none)新建自定義分詞器,tokenizer引數可指定內部使用的jieba.tokenizer分詞器。jieba.posseg.dt為預設詞性標註分詞器。

words = pseg.cut("

他改變了中國")

for word, flag in

words:

print(" "

.format(word, flag))

他 r改變 v

了 ul

中國 ns

6 並行分詞

將目標文字按行分隔後,把各行文字分配到多個 python 程序並行分詞,然後歸併結果,從而獲得分詞速度的可觀提公升。用法:

7 返回文字原始的位置

使用jieba.tokenize方法可以返回詞語在原文的起止位置。

result = jieba.tokenize(u'

上海益民食品一廠****')

print("

【普通模式】")

for tk in

result:

print("

word: \t\t start: \t\t end:

".format(tk[0],tk[1],tk[2]))

NLP 使用jieba分詞

相比於機械法分詞法,jieba聯絡上下文的分詞效果更好。同時使用hmm模型對片語的分類更加準確。測試對如下文字的分詞效果 南門街前段時間經過整改勸阻擺攤佔道的情況改善了很多,但是情況好了幾天又慢慢的和以前一樣了,只要有人帶頭 後面慢慢又擺出來,很多商戶現在乾脆用鉤子把一些貨物掛門口屋簷下的電線上,上...

jieba分詞使用記錄

jieba分詞核心分詞由兩部分組成。對於在詞典裡的字詞建立字典樹 trie 在搜尋的時候必須從根節點搜尋到葉子節點才算乙個詞 對於不在字典裡的字詞使用hmm模型根據最大可能性進行分詞 每次執行jieba分詞時程式會先檢查是否存在jieba.cache這個檔案。如果存在直接使用這個檔案中的資訊,否則重...

jieba 利用jieba分詞

目錄 三種分詞模式 新增自定義詞典進行分詞 jieba提供了三種分詞模式,分別是全模式,精確模式和搜尋引擎模式。全模式下會將所有可能的詞語都進行分詞,精確模式下會盡可能的將句子精確切開,搜尋引擎模式實在精確模式的基礎上,對長詞再進行劃分,提高分詞的召回率。使用cut和cut for search即可...