使用stanza完成自然语言分析处理任务
Posted ArkonLu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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结果
文档级标注
单一文档标注(多个结束符)
单一文档标注与句子级文档标注类似,差别在于输入的文档中包含了多个句子,每个句子都会单独作为标注的结果,存放在返回的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
基于正则表达式的词行词法分析|自然语言处理
1.任务一:邮箱地址和网址提取
1.1任务描述
∙ \\bullet ∙ 实现基于正则表达式的字符串抽取,完成对 string文本的邮箱地址和网址,并按下面格式输出。
测 试 输 入 {\\color{Violet}测试输入} 测试输入
(1)我的邮箱:nlp@nudt.com
(2)please click https://www.educoder.net
测 试 输 出 {\\color{Violet}测试输出} 测试输出
(1)提取邮箱地址如下:
nlp@nudt.com
(2)提取网址如下:
https://www.educoder.net
1.2代码
import re
string =input()
#分别生成对应正则表达式对象
regex1 = re.compile(r'\\w+@\\w+.\\w+')
regex2 = re.compile(r'ht{2}ps://w{3}.\\w+.\\w+')
res = regex1.findall(string)
if len(res):
print('提取邮箱地址如下:')
for i in res:
print(i)
res1 = regex2.findall(string)
if len(res1):
print('提取网址如下:')
for i in res1:
print(i)
2.任务二:密码提取
2.1任务描述
∙ \\bullet ∙ 实现基于正则表达式的字符串抽取,完成对 string文本的密码提取,并按下面格式输出。
测 试 输 入 {\\color{Violet}测试输入} 测试输入
密码是:NUDT_NLP2021
测 试 输 出 {\\color{Violet}测试输出} 测试输出
提取密码是
NUDT_NLP2021
2.2代码
import re
string =input()
#提取密码代码,密码中包含字母、数字、下划线
print("提取密码是")
p = re.compile('[a-z]|[A-Z]|_|\\d')
t = re.findall(p,string)
if t:
for i in t:
print(i,end="")
以上是关于使用stanza完成自然语言分析处理任务的主要内容,如果未能解决你的问题,请参考以下文章