1. 程式人生 > >pyhanlp 詞性標註(正篇)

pyhanlp 詞性標註(正篇)

詞性標註

在HanLP的readme中有這樣的一段話

在之前的分詞部分,我們已經發現了,在分詞器中,預設是開啟詞性標註的,甚至想要獲得沒有詞性標註的list還需要使用, HanLP.Config.ShowTermNature = False語句或者想辦法從term_list中獲取term.word。

但是在HanLP中正式的詞性標註,確實需要詞法分析器來完成的,這裡一共有三個詞法分析器。HMM詞法分析器,感知器詞性標註,CRF詞性標註。因為內部修改的問題哦,現在CRF分詞器現在預設是使用CRF詞法分析器來完成的。當然如果僅僅是想要獲取詞性,直接使用分詞器獲取也是可以的。

程式碼實現

本篇內容較少,接下來的內容主要介紹詞法分析器的使用。使用方法非常簡單,使用JClass直接呼叫即可,之前我們已經解除了這種方式,此處不再做過多介紹。唯一要注意的應該是,訓練語料已經更新,現在預設模型的訓練效果確實要比之前好一些。

from pyhanlp import * 
tests = ["商品和服務",
"上海華安工業(集團)公司董事長譚旭光和祕書胡花蕊來到美國紐約現代藝術博物館參觀",
"微軟公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。"]

# CRF 詞法分析器
CRFLexicalAnalyzer = JClass("com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer")
analyzer = CRFLexicalAnalyzer()
for sentence in tests:
    print(analyzer.analyze(
sentence))
商品/n 和/c 服務/vn
[上海/ns 華安/nz 工業/n (/w 集團/n )/w 公司/n]/nt 董事長/n 譚旭光/nr 和/c 祕書/n 胡花蕊/nr 來到/v [美國/ns 紐約/ns 現代/t 藝術/n 博物館/n]/ns 參觀/v
[微軟/nt 公司/n]/nt 於/p 1975年/t 由/p 比爾·蓋茲/n 和/c 保羅·艾倫/v 創立/v ,/w 18年/t 啟動/v 以/p 智慧/n 雲端/n 、/w 前端/n 為/v 導向/n 的/u 大/a 改組/vn 。/w
"""
基於感知機序列標註的詞法分析器,預設模型訓練自1998人民日報語料1月份。歡迎在更大的語料庫上訓練,以得到更好的效果。
無論在何種語料上訓練,都完全支援簡繁全半形和大小寫。( 現在已經改了 )
"""
PerceptronLexicalAnalyzer = JClass("com.hankcs.hanlp.model.perceptron.PerceptronLexicalAnalyzer") analyzer = PerceptronLexicalAnalyzer() print(analyzer.analyze("上海華安工業(集團)公司董事長譚旭光和祕書胡花蕊來到美國紐約現代藝術博物館參觀")) print(analyzer.analyze("微軟公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。")) # 任何模型總會有失誤,特別是98年這種陳舊的語料庫 print(analyzer.analyze("總統普京與特朗普通電話討論太空探索技術公司")) # 支援線上學習 analyzer.learn("與/c 特朗普/nr 通/v 電話/n 討論/v [太空/s 探索/vn 技術/n 公司/n]/nt") # 學習到新知識 print(analyzer.analyze("總統普京與特朗普通電話討論太空探索技術公司")) # 還可以舉一反三 print(analyzer.analyze("主席和特朗普通電話")) # 知識的泛化不是死板的規則,而是比較靈活的統計資訊 print(analyzer.analyze("我在浙江金華出生")) analyzer.learn("在/p 浙江/ns 金華/ns 出生/v") print(analyzer.analyze("我在四川金華出生,我的名字叫金華")) # 請使用者按需執行對空格製表符等的預處理,只有你最清楚自己的文字中都有些什麼奇怪的東西 print(analyzer.analyze("空格 \t\n\r\f 統統都不要" .replace("\\s+", "") # 去除所有空白符 .replace(" ", "") # 如果一些文字中含有html控制符 ))
[上海/ns 華安/nz 工業/n (/w 集團/n )/w 公司/n]/nt 董事長/n 譚旭光/nr 和/c 祕書/n 胡花蕊/nr 來到/v [美國/ns 紐約/ns 現代/t 藝術/n 博物館/n]/ns 參觀/v
[微軟/nt 公司/n]/nt 於/p 1975年/t 由/p 比爾·蓋茲/n 和/c 保羅·艾倫/nr 創立/v ,/w 18年/t 啟動/v 以/p 智慧/n 雲端/n 、/w 前端/f 為/v 導向/n 的/u 大/a 改組/vn 。/w
總統/n 普京/nr 與/c 特朗普/nr 通/vn 電話/n 討論/v 太空/s 探索/vn 技術/n 公司/n
總統/n 普京/nr 與/c 特朗普/nr 通/v 電話/n 討論/v [太空/s 探索/vn 技術/n 公司/n]/nt
主席/n 和/c 特朗/b 普通/a 電話/n
我/r 在/p 浙江/ns 金華/nr 出生/v
我/r 在/p 四川/ns 金華/ns 出生/v ,/w 我/r 的/u 名字/n 叫/v 金華/nr
空格 	
統統/n 都/d 不要/d
## HMM 詞法分析器
HMMLexicalAnalyzer = JClass("com.hankcs.hanlp.model.hmm.HMMLexicalAnalyzer")
analyzer = PerceptronLexicalAnalyzer()

print(analyzer.analyze("上海華安工業(集團)公司董事長譚旭光和祕書胡花蕊來到美國紐約現代藝術博物館參觀"))
print(analyzer.analyze("微軟公司於1975年由比爾·蓋茲和保羅·艾倫創立,18年啟動以智慧雲端、前端為導向的大改組。"))
[上海/ns 華安/nz 工業/n (/w 集團/n )/w 公司/n]/nt 董事長/n 譚旭光/nr 和/c 祕書/n 胡花蕊/nr 來到/v [美國/ns 紐約/ns 現代/t 藝術/n 博物館/n]/ns 參觀/v
[微軟/nt 公司/n]/nt 於/p 1975年/t 由/p 比爾·蓋茲/n 和/c 保羅·艾倫/nr 創立/v ,/w 18年/t 啟動/v 以/p 智慧/n 雲端/n 、/w 前端/f 為/v 導向/n 的/u 大/a 改組/vn 。/w