python中文分詞工具 結巴分詞jieba

2021-07-02 02:17:42 字數 4106 閱讀 1196

支援三種分詞模式:

精確模式,試圖將句子最精確地切開,適合文字分析;

全模式,把句子中所有的可以成詞的詞語都掃瞄出來, 速度非常快,但是不能解決歧義;

搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。

支援繁體分詞

支援自定義詞典

基於字首詞典實現高效的詞圖掃瞄,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (dag)

採用了動態規劃查詢最大概率路徑, 找出基於詞頻的最大切分組合

對於未登入詞,採用了基於漢字成詞能力的 hmm 模型,使用了 viterbi 演算法

jieba.cut 方法接受三個輸入引數: 需要分詞的字串;cut_all 引數用來控制是否採用全模式;hmm 引數用來控制是否使用 hmm 模型

jieba.cut_for_search 方法接受兩個引數:需要分詞的字串;是否使用 hmm 模型。該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細

待分詞的字串可以是 unicode 或 utf-8 字串、gbk 字串。注意:不建議直接輸入 gbk 字串,可能無法預料地錯誤解碼成 utf-8

jieba.cut 以及 jieba.cut_for_search 返回的結構都是乙個可迭代的 generator,可以使用 for 迴圈來獲得分詞後得到的每乙個詞語(unicode),或者用

jieba.lcut 以及 jieba.lcut_for_search 直接返回 list,建議使用list(cul())來轉換,原始碼也是這樣做的,少一步函式呼叫。

jieba.tokenizer(dictionary=default_dict) 新建自定義分詞器,可用於同時使用不同詞典。jieba.dt 為預設分詞器,所有全域性分詞相關函式都是該分詞器的對映。

載入詞典

開發者可以指定自己自定義的詞典,以便包含 jieba 詞庫里沒有的詞。雖然 jieba 有新詞識別能力,但是自行新增新詞可以保證更高的正確率

用法: jieba.load_userdict(file_name) # file_name 為檔案類物件或自定義詞典的路徑

詞典格式和 dict.txt 一樣,乙個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。file_name 若為路徑或二進位制方式開啟的檔案,則檔案必須為 utf-8 編碼。

詞頻省略時使用自動計算的能保證分出該詞的詞頻。

例如:創新辦 3 i

雲計算 5

凱特琳 nz

臺中更改分詞器

(預設為 jieba.dt)的 tmp_dir 和 cache_file 屬性,可分別指定快取檔案所在的資料夾及其檔名,用於受限的檔案系統。

範例:自定義詞典:

用法示例:

之前: 李小福 / 是 / 創新 / 辦 / 主任 / 也 / 是 / 雲 / 計算 / 方面 / 的 / 專家 /

載入自定義詞庫後: 李小福 / 是 / 創新辦 / 主任 / 也 / 是 / 雲計算 / 方面 / 的 / 專家 /

調整詞典

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

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

注意:自動計算的詞頻在使用 hmm 新詞發現功能時可能無效。

**示例:

>>> print('/'.join(jieba.cut('如果放到post中將出錯。', hmm=false)))

如果/放到/post/中將/出錯/。

>>> jieba.suggest_freq(('中', '將'), true)

494>>> print('/'.join(jieba.cut('如果放到post中將出錯。', hmm=false)))

如果/放到/post/中/將/出錯/。

>>> print('/'.join(jieba.cut('「臺中」正確應該不會被切開', hmm=false)))

「/臺/中/」/正確/應該/不會/被/切開

>>> jieba.suggest_freq('臺中', true)

69>>> print('/'.join(jieba.cut('「臺中」正確應該不會被切開', hmm=false)))

「/臺中/」/正確/應該/不會/被/切開

"通過使用者自定義詞典來增強歧義糾錯能力" ---

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

基於 python 自帶的 multiprocessing 模組,目前暫不支援 windows

用法:jieba.enable_parallel(4) # 開啟並行分詞模式,引數為並行程序數

jieba.disable_parallel() # 關閉並行分詞模式

例子:實驗結果:在 4 核 3.4ghz linux 機器上,對金庸全集進行精確分詞,獲得了 1mb/s 的速度,是單程序版的 3.3 倍。

注意:並行分詞僅支援預設分詞器 jieba.dt 和 jieba.posseg.dt。

cd /media/pika/files/mine/env/ubuntu_env

pika:/media/pika/files/mine/env/ubuntu_env$. bin/activate

(ubuntu_env) pika:/media/pika/files/mine/env/ubuntu_env$pip install jieba

pip install jieba

或者安裝到python3中:pip3 install jieba

皮皮blog

**示例

# encoding=utf-8

import jieba

seg_list = jieba.cut("我來到北京清華大學", cut_all=true)

print("full mode: " + "/ ".join(seg_list)) # 全模式

seg_list = jieba.cut("我來到北京清華大學", cut_all=false)

print("default mode: " + "/ ".join(seg_list)) # 精確模式

seg_list = jieba.cut("他來到了網易杭研大廈") # 預設是精確模式

print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜尋引擎模式

print(", ".join(seg_list))

輸出:

【全模式】: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學

【精確模式】: 我/ 來到/ 北京/ 清華大學

【新詞識別】:他, 來到, 了, 網易, 杭研, 大廈 (此處,「杭研」並沒有在詞典中,但是也被viterbi演算法識別出來了)

【搜尋引擎模式】: 小明, 碩士, 畢業, 於, 中國, 科學, 學院, 科學院, 中國科學院, 計算, 計算所, 後, 在, 日本, 京都, 大學, 日本京都大學, 深造

import jieba

sentences = ["我喜歡吃土豆","土豆是個百搭的東西","我不喜歡今天霧霾的北京", 'costumer service']

# jieba.suggest_freq('霧霾', true)

# jieba.suggest_freq('百搭', true)

words = [list(jieba.cut(doc)) for doc in sentences]

print(words)

[['我', '喜歡', '吃', '土豆'],

['土豆', '是', '個', '百搭', '的', '東西'],

['我', '不', '喜歡', '今天', '霧霾', '的', '北京'],

['costumer', ' ', 'service']]

[

皮皮blog

from:

ref: 官網

python中文分詞 結巴分詞

中文分詞是中文文字處理的乙個基礎性工作,結巴分詞利用進行中文分詞。其基本實現原理有三點 基於trie樹結構實現高效的詞圖掃瞄,生成句子中漢字所有可能成詞情況所構成的有向無環圖 dag 採用了動態規劃查詢最大概率路徑,找出基於詞頻的最大切分組合 對於未登入詞,採用了基於漢字成詞能力的hmm模型,使用了...

Python 結巴分詞(1)分詞

利用結巴分詞來進行詞頻的統計,並輸出到檔案中。結巴分詞的特點 支援繁體分詞 支援自定義詞典 mit 授權協議 演算法 分詞引數 使用者詞典 載入詞典 使用者詞典 userdict.dict 雲計算 5 李小福 2 nr 創新辦 3 i easy install 3 eng 好用 300 韓玉賞鑑 3...

結巴中文分詞

人工智慧領域文字分類中最基本的就是分詞,分詞中最基礎的莫過於結巴分詞。分詞,顧名思義就是把一句話劃分成若干的詞語,只不過如今我們是讓電腦自動進行分詞。結巴中文分詞支援的三種模式分別為 1.全模式 把句子中所有成詞的詞語都掃瞄出來,速度非常快,但不能消除歧義。分詞結果 jieba.cut 文字名稱,c...