1. 程式人生 > >【python 走進NLP】pyhanlp 自然語言處理包

【python 走進NLP】pyhanlp 自然語言處理包

安裝:

pip install pyhanlp

若安裝失敗:
從這裡下載JPype allows full access to Java class libraries.
https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype

開源地址:

https://github.com/hankcs/pyhanlp

HanLP是一系列模型與演算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點。

HanLP提供下列功能:

中文分詞
HMM-Bigram(速度與精度最佳平衡;一百兆記憶體)
最短路分詞、N-最短路分詞
由字構詞(側重精度,全世界最大語料庫,可識別新詞;適合NLP任務)
感知機分詞、CRF分詞
詞典分詞(側重速度,每秒數千萬字元;省記憶體)
極速詞典分詞
所有分詞器都支援:
索引全切分模式
使用者自定義詞典
相容繁體中文
訓練使用者自己的領域模型
詞性標註
HMM詞性標註(速度快)
感知機詞性標註、CRF詞性標註(精度高)
命名實體識別
基於HMM角色標註的命名實體識別 (速度快)
中國人名識別、音譯人名識別、日本人名識別、地名識別、實體機構名識別
基於線性模型的命名實體識別(精度高)
感知機命名實體識別、CRF命名實體識別
關鍵詞提取
TextRank關鍵詞提取
自動摘要
TextRank自動摘要
短語提取
基於互資訊和左右資訊熵的短語提取
拼音轉換
多音字、聲母、韻母、聲調
簡繁轉換
簡繁分歧詞(簡體、繁體、臺灣正體、香港繁體)
文字推薦
語義推薦、拼音推薦、字詞推薦
依存句法分析
基於神經網路的高效能依存句法分析器
MaxEnt依存句法分析
文字分類
情感分析
word2vec
詞向量訓練、載入、詞語相似度計算、語義運算、查詢、KMeans聚類
文件語義相似度計算
語料庫工具
部分預設模型訓練自小型語料庫,鼓勵使用者自行訓練。所有模組提供訓練介面,語料可參考OpenCorpus。
在提供豐富功能的同時,HanLP內部模組堅持低耦合、模型堅持惰性載入、服務堅持靜態提供、詞典堅持明文釋出,使用非常方便。預設模型訓練自全世界最大規模的中文語料庫,同時自帶一些語料處理工具,幫助使用者訓練自己的模型。

python 使用

# encoding: utf-8

from pyhanlp import *

# 中文分詞
print(HanLP.segment('皇家鹽湖城梅西煤球王c羅費城聯合'))



# 詞性標註
for term in HanLP.segment('徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作為主攻目標。'):
    print('{}\t{}'.format(term.word, term.nature)) # 獲取單詞與詞性

# 關鍵詞提取
document = "水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞釋出會上透露," \
           "根據剛剛完成了水資源管理制度的考核,有部分省接近了紅線的指標," \
           "有部分省超過紅線的指標。對一些超過紅線的地方,陳明忠表示,對一些取用水專案進行區域的限批," \
           "嚴格地進行水資源論證和取水許可的批准。"
print(HanLP.extractKeyword(document, 5))
# 自動摘要
print(HanLP.extractSummary(document, 3))
# 依存句法分析
print(HanLP.parseDependency("徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作為主攻目標。"))

執行結果:

[皇家, 鹽湖城, 梅西, 煤球王, c, 羅, 費城, 聯合]
徐先生	nr
還	d
具體	a
幫助	v
他	rr
確定	v
了	ule
把	pba
畫	v
雄鷹	n
、	w
松鼠	n
和	cc
麻雀	n
作為	p
主攻	vn
目標	n
。	w
[水資源, 陳明忠, 進行, 紅線, 部分]
[嚴格地進行水資源論證和取水許可的批准, 有部分省超過紅線的指標, 水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞釋出會上透露]
1	徐先生	徐先生	nh	nr	_	4	主謂關係	_	_
2	還	還	d	d	_	4	狀中結構	_	_
3	具體	具體	a	ad	_	4	狀中結構	_	_
4	幫助	幫助	v	v	_	0	核心關係	_	_
5	他	他	r	r	_	4	兼語	_	_
6	確定	確定	v	v	_	4	動賓關係	_	_
7	了	了	u	u	_	6	右附加關係	_	_
8	把	把	p	p	_	15	狀中結構	_	_
9	畫	畫	v	v	_	8	介賓關係	_	_
10	雄鷹	雄鷹	n	n	_	9	動賓關係	_	_
11	、	、	wp	w	_	12	標點符號	_	_
12	松鼠	松鼠	n	n	_	10	並列關係	_	_
13	和	和	c	c	_	14	左附加關係	_	_
14	麻雀	麻雀	n	n	_	10	並列關係	_	_
15	作為	作為	v	v	_	6	動賓關係	_	_
16	主攻	主攻	v	vn	_	17	定中關係	_	_
17	目標	目標	n	n	_	15	動賓關係	_	_
18	。	。	wp	w	_	4	標點符號	_	_


Process finished with exit code 0

java 使用 :
Maven 構建專案
pom.xml 載入依賴:

 <dependency>
            <groupId>com.hankcs</groupId>
            <artifactId>hanlp</artifactId>
            <version>portable-1.6.1</version>
        </dependency>
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.tokenizer.StandardTokenizer;

import java.util.List;

public class HanNLP {
    public static void main(String[] args) {

        /*詞性標註*/
        List<Term> termList = StandardTokenizer.segment("皇家鹽湖城梅西煤球王c羅");
        System.out.println(termList);

        /*關鍵詞提取*/
        String content = "皇家鹽湖城梅西煤球王c羅";
        List<String> keywordList = HanLP.extractKeyword(content, 6);
        System.out.println(keywordList);
    }
}

執行結果:

[皇家/n, 鹽湖城/ns, 梅西/nrf, 煤球/n, 王/nr, c/nx, 羅/j]
[皇家, 煤球, 梅西, 鹽湖城]

Process finished with exit code 0