pyhanlp 中文詞性標註與分詞簡介
pyhanlp 中文詞性 標註 與分詞簡介
pyhanlp實現的分詞器有很多,同時pyhanlp獲取hanlp中分詞器也有兩種方式
第一種是直接從封裝好的 hanlp類中獲取,這種獲取方式一共可以獲取五種分詞器,而現在預設的就是第一種維特比分詞器
1. 維特比 (viterbi):效率和效果的最佳平衡。也是最短路分詞,HanLP最短路求解採用Viterbi演算法
2. 雙陣列 trie樹 (dat):極速詞典分詞,千萬字元每秒(可能無法獲取詞性,此處取決於你的詞典)
3. 條件隨機場 (crf):分詞、詞性標註與命名實體識別精度都較高,適合要求較高的NLP任務
4. 感知機 (perceptron):分詞、詞性標註與命名實體識別,支援線上學習
5. N最短路 (nshort):命名實體識別稍微好一些,犧牲了速度
第二種方式是使用 JClass直接獲取java類,然後使用。這種方式除了獲取上面的五種分詞器以外還可以獲得一些其他分詞器,如NLP分詞器,索引分詞,快速詞典分詞等等
兩種使用方式的對比
第一種是使用作者給的 HanLP直接獲取分詞器,直接segment() 會獲取 預設的標準分詞器也就是維特比分詞器,也**可以使用newSegment函式,傳入上面的分詞器英文名稱來獲取新的分詞器,如使用HanLP.newSegment("crf")來獲取CRF分詞器。**第二種方式是使用JClass從java中獲取我們想要的類,好在這兩種方式都比較方便。除此之外要注意的是,在pyhanlp中還給出了SafeJClass類,其為JClass的執行緒安全版,你也可以使用SafeClass來代替JClass。不過好在HanLP中的很多類本身已經實現了執行緒安全,因此許多時候兩者是可以相互替代的。
[你好/vl, ,/w, 歡迎/v, 使用/v, HanLP/nx, 漢語/gi, 處理/vn, 包/v, !/w, 接下來/vl, 請/v, 從/p, 其他/rzv, Demo/nx, 中/f, 體驗/v, HanLP/nx, 豐富/a, 的/ude1, 功能/n, ~/nx]
# 標準分詞
text = (
"舉辦紀念活動銘記二戰歷史,不忘戰爭帶給人類的深重災難,是為了防止悲劇重演,確保和平永駐;記二戰歷史,更是為了提醒國際社會,需要共同捍衛二戰勝利成果和國際公平正義,必須警惕和抵制在歷史認知和維護戰後國際秩序問題上的倒行逆施。"
)
BasicTokenizer = JClass("com.hankcs.hanlp.tokenizer.BasicTokenizer")
print(BasicTokenizer.segment(text))
import time
start = time.time()
for i in range(100000):
HanLP.segment(text)
cost_time = time.time() - start
print("HanLP.segment :%.2f字每秒" % (len(text) * 100000 / cost_time))
start = time.time()
for i in range(100000):
BasicTokenizer.segment(text)
cost_time = time.time() - start
print("BasicTokenizer.segment :%.2f字每秒" % (len(text) * 100000 / cost_time))
[舉辦/v, 紀念活動/nz, 銘記/v, 二戰/n, 歷史/n, ,/w, 不忘/v, 戰爭/n, 帶給/v, 人類/n, 的/ude1, 深重/a, 災難/n, ,/w, 是/vshi, 為了/p, 防止/v, 悲劇/n, 重演/v, ,/w, 確保/v, 和平/n, 永駐/nz, ;/w, 記/v, 二戰/n, 歷史/n, ,/w, 更是/d, 為了/p, 提醒/v, 國際/n, 社會/n, ,/w, 需要/v, 共同/d, 捍衛/v, 二戰/n, 勝利/vn, 成果/n, 和/cc, 國際/n, 公平/a, 正義/n, ,/w, 必須/d, 警惕/v, 和/cc, 抵制/v, 在/p, 歷史/n, 認知/vn, 和/cc, 維護/v, 戰後/t, 國際/n, 秩序/n, 問題/n, 上/f, 的/ude1, 倒行逆施/vl, 。/w]
HanLP.segment :1518389.32字每秒
BasicTokenizer.segment :2415039.64字每秒
僅僅從剛剛的結果看,可能會不太理解為同一個分詞器效能差距這麼大?難道是因為中間程式碼的排程問題,其實也不是。將兩段程式碼前後互換之後,發現無論兩者怎麼排列,總是在前的速度較慢,在後的較快,因此應該是記憶體的問題,第二次呼叫時減少了部分記憶體的調動。所以同一個分詞器才會出現,第二次總比第一次快的現象。
標準分詞
說明
1. HanLP中有一系列“開箱即用”的靜態分詞器,以Tokenizer結尾,在接下來的例子中會繼續介紹。
2. HanLP.segment其實是對StandardTokenizer.segment的包裝。
3. 分詞結果包含詞性,每個詞性的意思請查閱《 HanLP詞性標註集》。
演算法詳解
1. 《詞圖的生成》
單獨獲取詞性或者詞語
如你所見的是,前面 print的結果是[詞語/詞性,詞語/詞性,/詞語/詞性…]的形式,那麼如果我們只想獲取詞語,或者詞性應該怎麼辦呢?
方法也很簡單。使用 HanLP.Config.ShowTermNature = False修改配置,使其不顯示詞性即可。
如果想要只獲取詞性也是可以的,因為原分詞器返回的是 Java中的ArrayList屬性,list中的每個單元都是一個term類,因此我們也可以通過獲取term中的word欄位來直接獲取詞語,或者nature屬性,直接獲取詞性。這一特徵,我們在之後也會用到。
因為 HanLP中是預設開啟詞性標註的,所以在這裡我取名為分詞與詞性標註,但是因為篇幅原因這裡沒有對詞性標註作過多解釋,詳細內容請看“詞性標註(正篇)”
作者: Font Tian
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2374646/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自然語言處理工具pyhanlp分詞與詞性標註自然語言處理HanLP分詞詞性標註
- jieba 詞性標註 & 並行分詞Jieba詞性標註並行分詞
- 中文分詞工具之基於字標註法的分詞中文分詞
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- python的詞性標註Python詞性標註
- SCWS PHP 中文簡易分詞PHP分詞
- 簡單有效的多標準中文分詞詳解中文分詞
- pyhanlp 停用詞與使用者自定義詞典功能詳解HanLP
- #Elasticsearch中文分詞器 #IK分詞器 @FDDLCElasticsearch中文分詞
- 古詩詞 中文 分詞 自動化分詞
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- NLP之中文分詞中文分詞
- 中文分詞技術中文分詞
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- 分詞工具Hanlp基於感知機的中文分詞框架HanLP中文分詞框架
- python 中文分詞包 jiebaPython中文分詞Jieba
- Hanlp分詞之CRF中文詞法分析詳解HanLP分詞CRF詞法分析
- 空間分析:4-1.分詞模型hanLP簡介與安裝分詞模型HanLP
- HanLP中文分詞Lucene外掛HanLP中文分詞
- 如何用Python做中文分詞?Python中文分詞
- 中文分詞器,整理自Ai中文分詞AI
- 中文分詞研究難點-詞語劃分和語言規範中文分詞
- 使用cjieba(結巴分詞庫)實現php擴充套件中文分詞JiebaPHP套件中文分詞
- java分詞工具hanlp介紹Java分詞HanLP
- [譯] 利用 Keras 深度學習庫進行詞性標註教程Keras深度學習詞性標註
- 中文搜尋引擎技術揭密:中文分詞中文分詞
- python 實現中文分詞統計Python中文分詞
- elastcisearch中文分詞器各個版本AST中文分詞
- 深度有趣 | 15 淺談中文分詞中文分詞
- Coreseek-帶中文分詞的Sphinx中文分詞
- 史上最全中文分詞工具整理中文分詞
- python使用jieba實現中文文件分詞和去停用詞PythonJieba分詞
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- 自然語言處理工具中的中文分詞器介紹自然語言處理中文分詞
- Python文字處理NLP:分詞與詞雲圖Python分詞
- 基於結構化感知機的詞性標註與命名實體識別框架詞性標註框架
- Python自然語言處理實戰(4):詞性標註與命名實體識別Python自然語言處理詞性標註
- 系統學習NLP(十)--詞性標註演算法綜述詞性標註演算法