分詞技術就是搜索引擎針對用戶提交查詢的關鍵詞串進行的查詢處理后根據用戶的關鍵詞串用各種匹配方法進行分詞的一種技術。
中文分詞(Chinese Word Segmentation)指的是將一個漢字序列(句子)切分成一個一個的單獨的詞,分詞就是將連續的字序列按照一定的規則重新組合成詞序列的過程。
現在分詞方法大致有三種:基於字符串配置的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
今天為大家分享一個國內使用人數最多的中文分詞工具GoJieba,源代碼地址:GoJieba ,官方文檔:GoJieba官方文檔
官方介紹
- 支持多種分詞方式,包括: 最大概率模式, HMM新詞發現模式, 搜索引擎模式, 全模式
- 核心算法底層由C++實現,性能高效。
- 無縫集成到 Bleve 到進行搜索引擎的中文分詞功能。
- 字典路徑可配置,NewJieba(...string), NewExtractor(...string) 可變形參,當參數為空時使用默認詞典(推薦方式)
模式擴展
- 精確模式:將句子精確切開,適合文本字符分析
- 全模式:把短語中所有的可以組成詞語的部分掃描出來,速度非常快,會有歧義
- 搜索引擎模式:精確模式基礎上,對長詞再次切分,提升引擎召回率,適用於搜索引擎分詞
主要算法
- 前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能出現成詞情況所構成的有向無環圖(DAG)
- 采用動態規划查找最大概率路徑,找出基於詞頻最大切分組合
- 對於未登錄詞,采用漢字成詞能力的HMM模型,采用Viterbi算法計算
- 基於Viterbi算法做詞性標注
- 基於TF-IDF和TextRank模型抽取關鍵詞
編碼實現
運行結果
性能評測
語言 | 源碼 | 耗時 |
C++版本 | CppJieba | 7.5 s |
Golang版本 | GoJieba | 9.11 s |
Python版本 | Jieba | 88.7 s |
計算分詞過程的耗時,不包括加載詞典耗時,CppJieba性能是GoJieba的1.2倍。CppJieba性能詳見jieba-performance-comparison,GoJieba由於是C++開發的CppJieba,性能方面僅次於CppJieba,如果追求性能還是可以考慮的。