HanLP2.1支持包括简繁中英日俄法德在内的104种语言上的10种联合任务:分词(粗分、细分2个标准,强制、合并、校正3种词典模式)、词性标注(PKU、863、CTB、UD四套词性规范)、命名实体识别(PKU、MSRA、OntoNotes三套规范)、依存句法分析(SD、UD规范)、成分句法分析、语义依存分析(SemEval16、DM、PAS、PSD四套规范)、语义角色标注、词干提取、词法语法特征提取、抽象意义表示(AMR)。
HanLP提供RESTful和native两种API,分别面向轻量级和海量级两种场景。
1. 创建虚拟环境(非必要操作
conda create -n hanlp python=3.7
2. 安装HanLP(当在线安装失败时,可选择离线安装 [hanlp库]
pip install hanlp-2.1.0a36.tar.gz
pip install hanlp_restful
1. 查询HanLP中所有的预训练模型
hanlp.pretrained.ALL
lang | corpora | model | tok | pos | ner | dep | con | srl | sdp | lem | fea | amr | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fine | coarse | ctb | pku | 863 | ud | pku | msra | ontonotes | SemEval16 | DM | PAS | PSD | |||||||||
mul | UD2.7 OntoNotes5 |
small | 98.62 | - | - | - | - | 93.23 | - | - | 74.42 | 79.10 | 76.85 | 70.63 | - | 91.19 | 93.67 | 85.34 | 87.71 | 84.51 | - |
base | 99.67 | - | - | - | - | 96.51 | - | - | 80.76 | 87.64 | 80.58 | 77.22 | - | 94.38 | 96.10 | 86.64 | 94.37 | 91.60 | - | ||
zh | open | small | 97.25 | - | 96.66 | - | - | - | - | - | 95.00 | 84.57 | 87.62 | 73.40 | 84.57 | - | - | - | - | - | - |
base | 97.50 | - | 97.07 | - | - | - | - | - | 96.04 | 87.11 | 89.84 | 77.78 | 87.11 | - | - | - | - | - | - | ||
close | small | 96.70 | 95.93 | 96.87 | 97.56 | 95.05 | - | 96.22 | 95.74 | 76.79 | 84.44 | 88.13 | 75.81 | 74.28 | - | - | - | - | - | - | |
base | 97.52 | 96.44 | 96.99 | 97.59 | 95.29 | - | 96.48 | 95.72 | 77.77 | 85.29 | 88.57 | 76.52 | 73.76 | - | - | - | - | - | - |
2. 使用HanLP
import hanlp
HanLP = hanlp.load(hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH)
HanLP(['清华大学研究核能的教授有哪些'])
{
'tok/fine': [['清华大学', '研究', '核能', '的', '教授', '有', '哪些']],
'tok/coarse': [['清华大学', '研究', '核能', '的', '教授', '有', '哪些']],
'pos/ctb': [['NR', 'VV', 'NN', 'DEC', 'NN', 'VE', 'PN']],
'pos/pku': [['nt', 'v', 'n', 'u', 'n', 'v', 'r']],
'pos/863': [['ni', 'v', 'n', 'u', 'n', 'v', 'r']],
'ner/msra': [[('清华大学', 'ORGANIZATION', 0, 1)]],
'ner/pku': [[('清华大学', 'nt', 0, 1)]],
'ner/ontonotes': [[('清华大学', 'ORG', 0, 1)]],
'srl': [[[('研究', 'PRED', 1, 2), ('核能', 'ARG1', 2, 3), ('教授', 'ARG0', 4, 5)], [('清华大学研究核能的教授', 'ARG0', 0, 5), ('有', 'PRED', 5, 6), ('哪些', 'ARG1', 6, 7)]]],
'dep': [[(5, 'nn'), (5, 'rcmod'), (2, 'dobj'), (2, 'cpm'), (6, 'top'), (0, 'root'), (6, 'dobj')]],
'sdp': [[[(2, 'Agt')], [(5, 'rAgt')], [(2, 'Cont')], [(2, 'mAux')], [(6, 'Poss')], [(7, 'mVain')], [(0, 'Root'), (6, 'mTone')]]], 'con': [['TOP', [['IP', [['NP', [['NP', [['NR', ['清华大学']]]], ['CP', [['CP', [['IP', [['VP', [['VV', ['研究']], ['NP', [['NN', ['核能']]]]]]]], ['DEC', ['的']]]]]], ['NP', [['NN', ['教授']]]]]], ['VP', [['VE', ['有']], ['NP', [['PN', ['哪些']]]]]]]]]]]
}
3. 可以选择子任务功能
HanLP(['清华大学研究核能的教授有哪些'], tasks='tok')
HanLP('清华大学研究核能的教授有哪些', tasks=['pos', 'dep'])
HanLP('清华大学研究核能的教授有哪些', tasks=['pos/863', 'dep'])
4. 可视化输出
HanLP(['清华大学研究核能的教授有哪些']).pretty_print()
Spacy的依存分析
词性标注集pos/tag | 依存句法分析标注集dep | 语义依存分析标注集sdp | |
LTP | 863词性标注集 | BH-DEP | BH-SDP |
SpaCy | 基于Google Universal POS Tag set扩展 | 采用了 ClearNLP 的依存分析标签 | - |
DDParser | 百度构建的标注集 | DuCTB | - |
HanLP | CTB、PKU、863、UD | SD、UD | SemEval16、DM、PAS、PSD |
stanford corenlp | Penn Chinese Treebank Tag Set(CTB) | 没找到说明采用的标注集 [链接] | - |
jieba | 和 ictclas 兼容的标记法 | 不支持 | 不支持 |