自然語言學習02-簡單好用的中文分詞利器 jieba 和 HanLP

jieba 分詞

jieba 安裝

jieba 的分詞算法
主要有以下三種:

  1. 基於統計詞典,構造前綴詞典,基於前綴詞典對句子進行切分,得到所有切分可能,根據切分位置,構造一個有向無環圖(DAG);
  2. 基於DAG圖,採用動態規劃計算最大概率路徑(最有可能的分詞結果),根據最大概率路徑分詞;
  3. 對於新詞(詞庫中沒有的詞),採用有漢字成詞能力的 HMM 模型進行切分。

引入 jieba 和語料

(1)精確分詞

精確分詞:精確模式試圖將句子最精確地切開,精確分詞也是默認分詞。

(2)全模式

全模式分詞:把句子中所有的可能是詞語的都掃描出來,速度非常快,但不能解決歧義。

3)搜索引擎模式

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

 

(4)用 lcut 生成 list

jieba.cut 以及 jieba.cut_for_search 返回的結構都是一個可迭代的 Generator,可以使用 for 循環來獲得分詞後得到的每一個詞語(Unicode)。jieba.lcut 對 cut 的結果做了封裝,l 代表 list,即返回的結果是一個 list 集合。同樣的,用 jieba.lcut_for_search 也直接返回 list 集合。

(5)獲取詞性

jieba 可以很方便地獲取中文詞性,通過 jieba.posseg 模塊實現詞性標註。

(6)並行分詞

並行分詞原理爲文本按行分隔後,分配到多個 Python 進程並行分詞,最後歸併結果。

注意: 並行分詞僅支持默認分詞器 jieba.dt 和 jieba.posseg.dt。目前暫不支持 Windows。

jieba.enable_parallel(4) # 開啓並行分詞模式,參數爲並行進程數 。jieba.disable_parallel() # 關閉並行分詞模式 。

(7)獲取分詞結果中詞列表的 top n

(8)自定義添加詞和字典

默認情況下,使用默認分詞,是識別不出這句話中的“鐵甲網”這個新詞,這裏使用用戶字典提高分詞準確性。

如果添加一個詞到字典,看結果就不一樣了。

但是,如果要添加很多個詞,一個個添加效率就不夠高了,這時候可以定義一個文件,然後通過 load_userdict()函數,加載自定義詞典,如下:

 

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

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

HanLP 分詞

pyhanlp 安裝

其爲 HanLP 的 Python 接口,支持自動下載與升級 HanLP,兼容 Python2、Python3。

安裝命令爲 pip install pyhanlp,使用命令 hanlp 來驗證安裝。

pyhanlp 目前使用 jpype1 這個 Python 包來調用 HanLP,如果遇到:

building '_jpype' extensionerror: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft VisualC++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

則推薦利用輕量級的 Miniconda 來下載編譯好的 jpype1。

    conda install -c conda-forge jpype1    pip install pyhanlp

HanLP 主項目採用 Java 開發,所以需要 Java 運行環境

命令行交互式分詞模式

在命令行界面,使用命令 hanlp segment 進入交互分詞模式,輸入一個句子並回車,HanLP 會輸出分詞結果:

(缺圖)

pyhanlp 分詞結果是帶有詞性的。

服務器模式

通過 hanlp serve 來啓動內置的 HTTP 服務器,默認本地訪問地址爲:http://localhost:8765 。

(缺圖)

也可以訪問官網演示頁面:http://hanlp.hankcs.com/

error:

未更新pip

cmd輸入

python -m pip install --upgrade pip

 

通過工具類 HanLP 調用常用接口

通過工具類 HanLP 調用常用接口,這種方式應該是我們在項目中最常用的方式。

(1)分詞

error

安裝好HanLP後第一次連接失敗,需要手動安裝,參見以下

https://blog.csdn.net/ljzology/article/details/100736302

    from pyhanlp import *    content = "現如今,機器學習和深度學習帶動人工智能飛速的發展,並在圖片處理、語音識別領域取得巨大成功。"    print(HanLP.segment(content))

 

(2)自定義詞典分詞

在沒有使用自定義字典時的分詞。

    txt = "鐵甲網是中國最大的工程機械交易平臺。"    print(HanLP.segment(txt))

 

添加自定義新詞:

    CustomDictionary.add("鐵甲網")    CustomDictionary.insert("工程機械", "nz 1024")    CustomDictionary.add("交易平臺", "nz 1024 n 1")    print(HanLP.segment(txt))

jieba 和 pyhanlp 能做的事還有很多,關鍵詞提取、自動摘要、依存句法分析、情感分析等

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章