HanLP是一个功能强大的自然语言处理库,提供了多种语言的分词、命名实体识别等功能。然而,网上关于HanLP的说明往往比较混乱,很多教程都是针对很多年前的API用法。而HanLP官网主要讲述的是RESTful格式的在线请求,但很少提到离线本地版本。

        本文将介绍如何在离线本地环境中使用HanLP 2.1的native API进行中文分词和命名实体识别。本文使用的HanLP版本为HanLP 2.1.0-beta.46

        基本思路是选择单任务API,并加载了预训练模型。首先对示例句子进行分词(Tokenizer),然后再根据分词结果进行命名实体识别(NER)。

1. 首先,我们需要安装HanLP库。使用以下命令进行安装

# 选用清华源加速
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

2. 对示例句子进行分词

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年', '参加', '了', '清华大学', '的', '计算机科学', '硕士', '研究生', '项目', '。']

3. 根据分词结果进行命名实体识别

# 语种见名称最后一个字段或相应语料库
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更适合本地离线使用,并且避免了网络延迟等问题。

https://github.com/hankcs/HanLP 的介绍表格

         在HanLP教程的GitHub页面(https://github.com/hankcs/HanLP)中,有一个表格包含了不同功能、RESTful API、多任务API、单任务API以及预训练模型等具体信息。这些信息可能不太容易找到,因此建议重点关注。

        在实际使用过程中,可以根据自己的需求选择合适的预训练模型。同时,HanLP还提供了多任务API,允许用户在一个统一的框架下执行多种任务,如分词、词性标注和命名实体识别等。

参考资料

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐