自然語言處理工具包HanLP的Python介面

藍天白芸朵發表於2018-10-18

pyhanlp: Python interfaces for HanLP
HanLP的Python介面,支援自動下載與升級HanLP,相容py2、py3。

安裝
pip install pyhanlp
使用命令hanlp來驗證安裝,如因網路等原因自動安裝HanLP失敗,可參考《手動配置》。

命令列
中文分詞
使用命令hanlp segment進入互動分詞模式,輸入一個句子並回車,HanLP會輸出分詞結果:

$ hanlp segment
商品和服務
商品/n 和/cc 服務/vn
當下雨天地面積水分外嚴重
當/p 下雨天/n 地面/n 積水/n 分外/d 嚴重/a
龔學平等領導說,鄧穎超生前杜絕超生
龔學平/nr 等/udeng 領導/n 說/v ,/w 鄧穎超/nr 生前/t 杜絕/v 超生/vi
還可以重定向輸入輸出到檔案等:

$ hanlp segment <<< `歡迎新老師生前來就餐`
歡迎/v 新/a 老/a 師生/n 前來/vi 就餐/vi
依存句法分析
命令為hanlp parse,同樣支援互動模式和重定向:

$ hanlp parse <<< `徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作為主攻目標。`
1 徐先生 徐先生 nh nr 4 主謂關係 _
2 還 還 d d 4 狀中結構 _
3 具體 具體 a a 4 狀中結構 _
4 幫助 幫助 v v 0 核心關係 _
5 他 他 r rr 4 兼語 _
6 確定 確定 v v 4 動賓關係 _
7 了 了 u ule 6 右附加關係 _
8 把 把 p pba 15 狀中結構 _
9 畫 畫 v v 8 介賓關係 _
10 雄鷹 雄鷹 n n 9 動賓關係 _
11 、 、 wp w 12 標點符號 _
12 松鼠 松鼠 n n 10 並列關係 _
13 和 和 c cc 14 左附加關係 _
14 麻雀 麻雀 n n 10 並列關係 _
15 作為 作為 p p 6 動賓關係 _
16 主攻 主攻 v vn 17 定中關係 _
17 目標 目標 n n 15 動賓關係 _
18 。 。 wp w 4 標點符號 _
伺服器
通過hanlp serve來啟動內建的http伺服器,預設本地訪問地址為:http://localhost:8765 ;也可以訪問官網演示頁面:http://hanlp.hankcs.com/

升級
通過hanlp update命令來將HanLP升級到最新版。該命令會獲取GitHub最新版本並自動下載安裝。

歡迎通過hanlp –help檢視最新幫助手冊。

API
通過工具類HanLP呼叫常用介面:

from pyhanlp import *

print(HanLP.segment(`你好,歡迎在Python中呼叫HanLP的API`))
testCases = [

"商品和服務",
"結婚的和尚未結婚的確實在干擾分詞啊",
"買水果然後來世博園最後去世博會",
"中國的首都是北京",
"歡迎新老師生前來就餐",
"工信處女幹事每月經過下屬科室都要親口交代24口交換機等技術性器件的安裝工作",
"隨著頁遊興起到現在的頁遊繁盛,依賴於存檔進行邏輯判斷的設計減少了,但這塊也不能完全忽略掉。"]

for sentence in testCases: print(HanLP.segment(sentence))

關鍵詞提取

document = “水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞釋出會上透露,”

       "根據剛剛完成了水資源管理制度的考核,有部分省接近了紅線的指標," 
       "有部分省超過紅線的指標。對一些超過紅線的地方,陳明忠表示,對一些取用水專案進行區域的限批," 
       "嚴格地進行水資源論證和取水許可的批准。"

print(HanLP.extractKeyword(document, 2))

自動摘要

print(HanLP.extractSummary(document, 3))

依存句法分析

print(HanLP.parseDependency(“徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作為主攻目標。”))
更多功能
更多功能,包括但不限於:

自定義詞典
極速詞典分詞
索引分詞
CRF分詞
感知機詞法分析
臺灣正體、香港繁體
關鍵詞提取、自動摘要
文字分類、情感分析
請閱讀HanLP主專案文件以瞭解更多。呼叫更底層的API需要參考Java語法用JClass引入更深的類路徑。以感知機詞法分析器為例,這個類位於包名com.hankcs.hanlp.model.perceptron.PerceptronLexicalAnalyzer下,所以先用JClass得到類,然後就可以呼叫了:

PerceptronLexicalAnalyzer = JClass(`com.hankcs.hanlp.model.perceptron.PerceptronLexicalAnalyzer`)
analyzer = PerceptronLexicalAnalyzer()
print(analyzer.analyze(“上海華安工業(集團)公司董事長譚旭光和祕書胡花蕊來到美國紐約現代藝術博物館參觀”))
輸出:

[上海/ns 華安/nz 工業/n (/w 集團/n )/w 公司/n]/nt 董事長/n 譚旭光/nr 和/c 祕書/n 胡花蕊/nr 來到/v [美國/ns 紐約/ns 現代/t 藝術/n 博物館/n]/ns 參觀/v
如果你經常使用某個類,歡迎將其寫入pyhanlp/__init__.py中並提交pull request,謝謝!

與其他專案共享data
HanLP具備高度可自定義的特點,所有模型和詞典都可以自由替換。如果你希望與別的專案共享同一套data,只需將該專案的配置檔案hanlp.properties拷貝到pyhanlp的安裝目錄下即可。本機安裝目錄可以通過hanlp –version獲取。

同時,還可以通過–config臨時載入另一個配置檔案:

hanlp segment –config path/to/another/hanlp.properties
配置
自動配置
預設在首次呼叫HanLP時自動下載jar包和資料包,並自動完成配置。

手動配置
如因網路等原因自動配置失敗,可以通過設定環境變數來自定義HanLP版本和資料位置。

變數名 預設值 備註
HANLP_STATIC_ROOT pyhanlp所在安裝路徑的static資料夾 配置檔案hanlp.properties所在的目錄
HANLP_JAR_PATH pyhanlp所在安裝路徑的static資料夾 HanLP jar 包位置
HANLP_JVM_XMS 1g Java 虛擬機器 初始申請記憶體大小
HANLP_JVM_XMX 1g Java 虛擬機器 可佔用的最大記憶體
HANLP_GOOGLE_UA UA-XXXXX-X Google Analytics 網站 id
HANLP_VERBOSE 0 除錯日誌開關
注意:

使用pip初次安裝 pyhanlp 後,不設定上述變數,程式會自動下載所需依賴到預設位置。如果是設定了上述變數,則不進行下載。因為檔案比較大,網路下載穩定性等原因,建議提前準備好jar包,配置檔案和data,並使用環境變數進行配置。

保證 hanlp.properties 中的 root 是指向正確的data路徑。

比如:

export HANLP_JAR_PATH=/hanlp/hanlp-portable-1.6.0.jar
export HANLP_STATIC_ROOT=/hanlp
就需要保證有如下的目錄結構:

hanlp
├── data
│ ├── README.url
│ ├── dictionary
│ └── model
├── hanlp.properties
└── hanlp-portable-1.6.0.jar
測試
git clone https://github.com/hankcs/pyhanlp.git
cd pyhanlp
pip install -r requirements.txt # 安裝依賴
export HANLP_JAR_PATH= # 配置環境變數
export HANLP_STATIC_ROOT= # 配置環境變數
python tests/test_hanlp.py # 執行測試
授權協議
Apache License 2.0

文章來源於hankcs的部落格


相關文章