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詞性標註並行分詞
- 中文分詞工具之基於字標註法的分詞中文分詞
- 學習筆記CB002:詞幹提取、詞性標註、中文切詞、文件分類筆記詞性標註
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- python的詞性標註Python詞性標註
- NLP自然語言處理 jieba中文分詞,關鍵詞提取,詞性標註,並行分詞,起止位置,文字挖掘,NLP WordEmbedding的概念和實現自然語言處理Jieba中文分詞詞性標註並行
- SCWS PHP 中文簡易分詞PHP分詞
- 簡單有效的多標準中文分詞詳解中文分詞
- pyhanlp 停用詞與使用者自定義詞典功能詳解HanLP
- #Elasticsearch中文分詞器 #IK分詞器 @FDDLCElasticsearch中文分詞
- solr以及ik分詞器簡介Solr分詞
- Python分詞模組推薦:jieba中文分詞PythonJieba中文分詞
- 中文分詞技術中文分詞
- IKAnalyzer 中文分詞的不同版本切詞方式中文分詞
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- 分詞工具Hanlp基於感知機的中文分詞框架HanLP中文分詞框架
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- Hanlp分詞之CRF中文詞法分析詳解HanLP分詞CRF詞法分析
- java+lucene中文分詞,搜尋引擎搜詞剖析Java中文分詞
- iOS中文近似度的演算法及中文分詞(結巴分詞)的整合iOS演算法中文分詞
- HanLP中文分詞Lucene外掛HanLP中文分詞
- python 中文分詞包 jiebaPython中文分詞Jieba
- ElasticSearch5.6.1 + 中文分詞(IK)ElasticsearchH5中文分詞
- 分享IKAnalyzer 3.0 中文分詞器中文分詞
- 中文分詞器,整理自Ai中文分詞AI
- 中文分詞研究難點-詞語劃分和語言規範中文分詞
- 空間分析:4-1.分詞模型hanLP簡介與安裝分詞模型HanLP
- 使用cjieba(結巴分詞庫)實現php擴充套件中文分詞JiebaPHP套件中文分詞
- 中文搜尋引擎技術揭密:中文分詞中文分詞
- java分詞工具hanlp介紹Java分詞HanLP
- Lucene中文分析器的中文分詞準確性和效能比較中文分詞
- 史上最全中文分詞工具整理中文分詞
- 深度有趣 | 15 淺談中文分詞中文分詞
- elastcisearch中文分詞器各個版本AST中文分詞
- 如何用Python做中文分詞?Python中文分詞
- 中文分詞演算法總結中文分詞演算法
- 用Python寫一個簡單的中文分詞器Python中文分詞