jieba 分詞
jieba 安裝
jieba 的分詞算法
主要有以下三種:
- 基於統計詞典,構造前綴詞典,基於前綴詞典對句子進行切分,得到所有切分可能,根據切分位置,構造一個有向無環圖(DAG);
- 基於DAG圖,採用動態規劃計算最大概率路徑(最有可能的分詞結果),根據最大概率路徑分詞;
- 對於新詞(詞庫中沒有的詞),採用有漢字成詞能力的 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 能做的事還有很多,關鍵詞提取、自動摘要、依存句法分析、情感分析等