使用stanza完成自然语言分析处理任务

安装stanza#

直接使用pip命令即可安装stanza package

pip install stanza

构建管道#

stanza中的管道用于构建NLP任务的模型加载序列、文本处理序列。需要注意,当本地不存在指定的Processor模型时,Pipeline对象会执行一个自动下载程序,将模型下载到本地。

Pipeline的初始化示例#

import stanza
nlp = stanza.Pipeline('en')# 加载全部英文模型,包括分词、序列标注、句法依赖,语义角色标注等
nlp = stanza.Pipeline('zh', processors='tokenize,pos')# 加载中文分词,序列标注模型

详细的processors列表见 processor_name_list

Pipeline的客制化设置#

package 指定模型的训练数据集gsd

nlp = stanza.Pipeline('de', processors='tokenize,mwt', package='gsd')

设定采用conll02数据集训练出的模型进行NER任务,默认的模型完成其他分析任务

nlp = stanza.Pipeline('nl', processors={'ner': 'conll02'})

设定采用winker数据集训练出的模型进行NER任务,lassysmall训练的模型完成其他分析任务

nlp = stanza.Pipeline('nl', processors={'ner': 'wikiner'}, package='lassysmall')

只将部分子任务添加到管道,并且为各子任务指定模型来源,注意package=None,若不设置,Pipline中会增加多余的子任务

processor_dict = {
    'tokenize': 'gsd', 
    'pos': 'hdt', 
    'ner': 'conll03', 
    'lemma': 'default'
}
nlp = stanza.Pipeline('de', processors=processor_dict, package=None)

控制模型运行的设备CPU/GPU#

stanza中的模型默认在GPU上运行,可以在构建管道时,通过use_gpu = False使得任务得以在CPU上展开。

nlp = stanza.Pipeline('en', use_gpu=False)

执行标注#

句子级标注(一个句子结束符)#

句子级文档标注直接将要标注的句子放入构建好的Pipeline对象中,执行即可。

nlp = stanza.Pipeline('zh',processors='tokenize,pos,ner')
doc = nlp('今天也是元气满满的一天。')
print('doc:')
doc

得到元素长度为1的doc对象,其结构如下,doc对象中包含了标注结果和对应的span结果
image

文档级标注#

单一文档标注(多个结束符)#

单一文档标注与句子级文档标注类似,差别在于输入的文档中包含了多个句子,每个句子都会单独作为标注的结果,存放在返回的doc对象list中

nlp = stanza.Pipeline('zh',processors='tokenize,pos,ner')
doc = nlp('今天也是元气满满的一天。明天应该还是元气满满的一天。')# 返回一个doc对象,该doc的长度是2
# 访问标注结果
for sentence in doc.sentences:
    for word in sentence.words:
        print(word.ner, word.pos)

多文档标注#

多文档标注借助stanza.Document()类实现,返回的标注结果是每个单一文档的doc组成的list

import stanza
nlp = stanza.Pipeline(lang="en") # 初始化默认的英文Pipeline
documents = ["This is a test document.", "I wrote another document for fun."] # 要处理的文档
in_docs = [stanza.Document([], text=d) for d in documents] #将每个文档构造出对应的stanza.Document对象,放入输入列表
out_docs = nlp(in_docs) # 开始标注
print(out_docs[1]) # 得到标注结果,返回的标注结果是每个单一文档的doc组成的list

Reference#

https://stanfordnlp.github.io/stanza/getting_started.html#basic-example

作者:Arkon

出处:https://www.cnblogs.com/arkon/p/17322718.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   ArkonLu  阅读(753)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示