首页 > 其他分享 >使用stanza完成自然语言分析处理任务

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

时间:2023-04-16 11:57:49浏览次数:44  
标签:nlp Pipeline doc 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

标签:nlp,Pipeline,doc,stanza,任务,文档,自然语言,标注
From: https://www.cnblogs.com/arkon/p/17322718.html

相关文章

  • [软件工程]提前完成任务的风险如何定义
    近日在执行中,一个团队发来邮件:您好!关于周报有个问题想请教一下: 1.项目的安排工作提前完成了,怎么去规划风险?关于此问题,我的回复如下:提前完成是不是风险,一般要分为几个方面考量:1,计划时考虑不周全,也可能是项目周期允许,那没有问题;2,如果是因为对任务考虑不全认为过于复杂,这也没......
  • 简易的延迟任务
    【c#】分享一个简易的基于时间轮调度的延迟任务实现     在很多.net开发体系中开发者在面对调度作业需求的时候一般会选择三方开源成熟的作业调度框架来满足业务需求,比如Hangfire、Quartz.NET这样的框架。但是有些时候可能我们只是需要一个简易的延迟任务,这个时候引......
  • 如何在Linux中加入cron任务
    从命令行中添加cron任务要添加cron任务,你可以使用称为crontab的命令行工具。输入下面的命令会创建一个以当前用户运行的新cron任务。1.$crontab-e如果你想要以其他用户运行cron任务,输入下面的命令。1.$sudocrontab-u-e你将会看见一个文本编辑窗口,这里你可以添加或者编辑cron......
  • js 异步任务执行顺序问题
    js是单线程的(非阻塞的),实现方法就是事件循环;分同步任务和异步任务;newPromise((resolve,reject)=>{resolve(1)console.log('log1')}).then(()=>{console.log('log2')})console.log('log3')setTimeout(()=>......
  • 文盘Rust -- 用Tokio实现简易任务池
    作者:京东科技贾世闻Tokio无疑是Rust世界中最优秀的异步Runtime实现。非阻塞的特性带来了优异的性能,但是在实际的开发中我们往往需要在某些情况下阻塞任务来实现某些功能。我们看看下面的例子fnmain(){letmax_task=1;letrt=runtime::Builder::......
  • AutoGPT自主完成复杂任务全程无需人类
    OpenAI的AndrejKarpathy都大力宣传,认为AutoGPT是prompt工程的下一个前沿。近日,AI界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为AutoGPT的研究开始走进大众视野。特斯拉前AI总监、刚刚回归OpenAI的AndrejKarpathy也为其大力......
  • 主线任务
    1.保证系统平稳运行。1.1 系统监控报警处理。    1.2  2. 新业务或者新需求软件安装,调试运行正常。 3. 配合好其他部门工作,提高工作效率。   其他部门工具集成自动化。开发运维测试 产品运营 客服 财务销售。 4.其他日常工作。......
  • 腾讯云镜YunJing——Agent定时任务脚本分析
    缘起如果你有台腾讯云主机,会发现默认有个叫YunJing的进程。把它kill掉后,发现一段时间又出现了这是为什么捏?分析定时任务配置文件通过crontab定时任务目录,会发现有个叫yunjing的配置文件。*/30****root/usr/local/qcloud/YunJing/YDCrontab.sh>/dev/null2>&1......
  • XXL-JOB定时任务框架(Oracle定制版)
    特点xxl-job是一个轻量级、易扩展的分布式任务调度平台,能够快速开发和简单学习。开放源代码并被多家公司线上产品使用,开箱即用。尽管其确实非常好用,但我在工作中使用的是Oracle数据库,因为xxl-job是针对MySQL设计的,所以使用起来需要进行一些魔改。为了方便后人使用,我已经创建了许......
  • SpringBoot项目启动执行任务的几种方式
    1、直接在启动类下面调用方法@SpringBootApplicationpublicclassTestApplication{publicstaticvoidmain(String[]args){SpringApplication.run(TestApplication.class,args);System.out.println("在启动类添加初始下方法");}}2、使用@P......