赞
踩
HanLP是一个功能强大的自然语言处理库,提供了多种语言的分词、命名实体识别等功能。然而,网上关于HanLP的说明往往比较混乱,很多教程都是针对很多年前的API用法。而HanLP官网主要讲述的是RESTful格式的在线请求,但很少提到离线本地版本。
本文将介绍如何在离线本地环境中使用HanLP 2.1的native API进行中文分词和命名实体识别。本文使用的HanLP版本为HanLP 2.1.0-beta.46。
基本思路是选择单任务API,并加载了预训练模型。首先对示例句子进行分词(Tokenizer),然后再根据分词结果进行命名实体识别(NER)。
- # 选用清华源加速
- pip install hanlp -i https://pypi.tuna.tsinghua.edu.cn/simple
-
- # 安装完整版,注意zsh对于方括号[]要用引号包裹起来
- #pip install --upgrade "hanlp[full]" -i https://pypi.tuna.tsinghua.edu.cn/simple
-
- import hanlp
-
- # 示例句子
- sentence = "李华在2023年参加了清华大学的计算机科学硕士研究生项目。"
-
- # 显示可用的分词模型,语种见名称最后一个字段或相应语料库
- print(hanlp.pretrained.tok.ALL)
-
-
- # 加载预训练模型进行分词任务
- tok = hanlp.load(hanlp.pretrained.tok.COARSE_ELECTRA_SMALL_ZH)
-
- # 分词结果
- sen_tok = tok(sentence)
- print(sen_tok)
- # 输出:['李华', '在', '2023年', '参加', '了', '清华大学', '的', '计算机科学', '硕士', '研究生', '项目', '。']
- # 语种见名称最后一个字段或相应语料库
- print(hanlp.pretrained.ner.ALL)
-
- # 加载预训练模型进行命名实体识别任务
- ner = hanlp.load(hanlp.pretrained.ner.MSRA_NER_ELECTRA_SMALL_ZH)
-
- # 命名实体识别结果
- print(ner([sen_tok], tasks='ner*'))
- # 输出:[[('李华', 'PERSON', 0, 1), ('2023年', 'DATE', 2, 3), ('清华大学', 'ORGANIZATION', 5, 6)]]
在这个过程中,我们选择了单任务API。这种方法相较于RESTful API更适合本地离线使用,并且避免了网络延迟等问题。
在HanLP教程的GitHub页面(https://github.com/hankcs/HanLP)中,有一个表格包含了不同功能、RESTful API、多任务API、单任务API以及预训练模型等具体信息。这些信息可能不太容易找到,因此建议重点关注。
在实际使用过程中,可以根据自己的需求选择合适的预训练模型。同时,HanLP还提供了多任务API,允许用户在一个统一的框架下执行多种任务,如分词、词性标注和命名实体识别等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。