当前位置: 首页 > news >正文

使用PaddleNLP UIE模型提取上市公司PDF公告关键信息

项目地址:使用PaddleNLP UIE模型抽取PDF版上市公司公告 - 飞桨AI Studio星河社区 (baidu.com)

背景介绍

本项目将演示如何通过PDFPlumber库和PaddleNLP UIE模型,抽取公告中的相关信息。本次任务的PDF内容是破产清算的相关公告,目标是获取受理时间,受理法院,相关公司等内容,作为市场分析的关键数据。

公告示例

证券代码:000033 证券简称:*ST新都 公告编号:2016-05-19 深圳新都酒店股份有限公司关于公司第二大股东破产清算的公告 本公司及董事会全体成员保证公告内容的真实、准确和完整,没有虚假记载、误导性陈述或者重大遗漏。 2016年5月18日,公司收到公司股东深圳市瀚明投资有限公司的管理人送达的(2016)瀚明管发字第024号《通报函》,主要内容如下: “深圳市中级人民法院于2016年4月19日依法裁定受理申请人上海超创企业服务中心(有限合伙)提出的对深圳市瀚明投资有限公司(以下简称“瀚明投资”)进行破产清算的申请,并指定深圳市正源清算事务有限公司和深圳市理恪德清算事务有限公司担任瀚明投资管理人。瀚明投资破产清算的各项工作目前正在有序推进中。” 瀚明投资的破产清算将导致其持有本公司45551000股(占公司总股本的 10.6%)股权的处置及归属存在不确定性,瀚明投资破产清算不会对本公司正常经营产生影响。 本公司将根据瀚明投资破产清算进程履行公告义务。 特此公告。 深圳新都酒店股份有限公司 董事会 2016年5月18日

技术方案

UIE介绍

信息抽取指的是自动从无结构或半结构的文本中抽取出结构化信息的任务, 主要包含了实体识别、关系抽取、事件抽取、评论抽取等任务。

  • 实体抽取 命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。

  • 关系抽取 关系抽取(Relation Extraction,简称RE),是指从文本中识别实体并抽取实体之间的语义关系,进而获取三元组信息,即<主体,谓语,客体>。

  • 事件抽取 事件抽取 (Event Extraction, 简称EE),是指从自然语言文本中抽取预定义的事件触发词(Trigger)和事件论元(Argument),组合为相应的事件结构化信息。

传统的预训练-微调范式下,序列标注方案比较常用。UIE(Universal Information Extraction,通用信息抽取) 开创了基于Prompt的信息抽取多任务统一建模方式,通过大规模多任务预训练学习的通用抽取能力,不限定行业领域和抽取目标。UIE 具备强大的零样本抽取和小样本快速迁移能力。例如,在金融领域的事件抽取任务上,仅仅标注5条样本,F1值就提升了25个点!

通过调用 PaddleNLP Taskflow API 直接使用UIE进行零样本抽取,同时,PaddleNLP也打通了数据标注-微调训练-预测部署全流程,方便大家进行定制训练。

 

应用示例

UIE不限定行业领域和抽取目标,以下是一些零样本行业示例:

  • 法律场景-判决书抽取

  • 金融场景-收入证明、招股书抽取

代码实践

环境准备

# 安装最新版 PaddleNLP
!pip install --upgrade paddlenlp --user

# 安装PDFPlumber
!pip install pdfplumber --user

PDF文档解析

本次任务使用的PDF都是从相关网站直接获取的可编辑格式,使用PDFPlumber库提取PDF中的内容并保存成为txt格式,便于输入UIE模型中。扫描件等图片格式的PDF需要OCR技术,推荐使用PaddleOCR。

# 导入PDFPlumber
import pdfplumber as ppl# 导入正则表达式相关库
import re 
# 使用 PDFPlumber 库打开PDF文件
pdf_path = "work/input/000011_61727994c8c8ae10ff7ce243.pdf"
pdf = ppl.open(pdf_path)# 获得 PDFPlumber 的对象,可以查看其中的文字内容
for page in pdf.pages:print(page.extract_text())
深圳市物业发展(集团)股份有限公司 
证券代码:000011  200011  股票简称:深物业A  深物业B  编号:2014-3号 关于海南公司进行破产清算的进展公告 
本公司及董事会全体成员保证公告内容的真实、准确、
完整、及时、公平,没有虚假记载、误导性陈述或者重大遗
漏。 
本公司于 2011 年 11 月 25 日第七届董事会第四次会议作
出董事会决议,拟对本公司下属全资子公司-海南新达开发总
公司(以下简称“海南公司”)进行破产清算(详见本公司于
2011 年 11 月 28 日发布的《董事会决议公告》)。本公司于 2013
年 9 月 26 日以海南公司多年来处于严重亏损状态,无法清偿
到期债务为由向海南省海口市中级人民法院(以下简称“海
口中院”)申请对海南公司进行破产清算。 
一、最新进展情况 
2014 年 3 月 14 日本公司收到海口中院下发的(2013)
海中法破(预)字第 7 号《民事裁定书》,海口中院于 2014
年2月27日裁定受理本公司提出的对海南公司破产清算的申
请,现将有关情况公告如下: 
海口中院认为:新达公司的住所地在海口市国贸大道 48
号新达商务大厦,该司是由海南省工商行政管理局核准登记
的企业,故海口中院对本案有管辖权。因新达公司不能清偿
到期债务,故深物业股份公司提出对新达公司进行破产清算1 的申请符合受理条件。依照《中华人民共和国企业破产法》
第二条第一款、第三条、第七条第二款之规定,裁定如下: 
受理申请人深圳市物业发展(集团)股份有限公司对被
申请人海南新达开发总公司破产清算的申请。 
本裁定自即日起生效。 
二、其他情况 
本公司已对海南公司账务进行了全额计提,破产清算对
本公司财务状况无影响。 
具体情况请查阅本公司2011年11月28日发布的《董事会
决议公告》。 特此公告 备查文件:海南省海口市中级人民法院《民事裁定书》((2013)
海中法破(预)字第 7 号) 深圳市物业发展(集团)股份有限公司 
董事会 
二〇一四年三月十五日 2 

对于表格的提取,PDFPlumber可以返回半结构化的表格数据,但是想要准确还原原有的表格结构,还需要根据不同的表格状况作出调整。


pdf_path = "work/input/000525_61d01fedb68daaca17ea0dad.pdf"
pdf = ppl.open(pdf_path)
# 获得PDFPlumber的对象,可以查看其中的文字内容
for page in pdf.pages:print(page.extract_table())

[['股东名称', '持股数量\n(股)', '持股 \n比例', '质押', None, None, '司法冻结', None, None, '轮候冻结', None, None], [None, None, None, '累计数量\n(股)', '占其所\n持股份\n比例', '占公司\n总股本\n比例', '累计数量\n(股)', '占其所\n持股份\n比例', '占公司\n总股本\n比例', '累计数量\n(股)', '占其所持\n股份比例', '占公司总\n股本比例'], ['南一农集团', '182924731', '31.50%', '167850000', '91.76%', '28.90%', '182424031', '99.73%', '31.41%', '1559040275', '852.29%', '268.44%']] None

对于一般的纯文字PDF,使用PDFPlumber读取并保存为txt格式。

pdf_path = "work/input/000011_61727994c8c8ae10ff7ce243.pdf"
pdf = ppl.open(pdf_path)
texts = []# 按页打开,合并所有内容,对于多页或一页PDF都可以使用
for page in pdf.pages:text = page.extract_text()texts.append(text)
txt_string = ''.join(texts)# 保存为和原PDF同名的txt文件
txt_path = pdf_path.split('.')[0] + '.txt'
with open(txt_path, "w", encoding='utf-8') as f:f.write(txt_string)f.close()

数据预处理

从txt中读取文本,作为信息抽取的输入。对于比较长的文本,可能需要人工的设定一些分割关键词,分段输入以提升抽取的效果。

with open(txt_path, 'r') as f:file_data = f.readlines()
record = ''
for data in file_data:record += data
print(record)
深圳市物业发展(集团)股份有限公司 
证券代码:000011  200011  股票简称:深物业A  深物业B  编号:2014-3号 关于海南公司进行破产清算的进展公告 
本公司及董事会全体成员保证公告内容的真实、准确、
完整、及时、公平,没有虚假记载、误导性陈述或者重大遗
漏。 
本公司于 2011 年 11 月 25 日第七届董事会第四次会议作
出董事会决议,拟对本公司下属全资子公司-海南新达开发总
公司(以下简称“海南公司”)进行破产清算(详见本公司于
2011 年 11 月 28 日发布的《董事会决议公告》)。本公司于 2013
年 9 月 26 日以海南公司多年来处于严重亏损状态,无法清偿
到期债务为由向海南省海口市中级人民法院(以下简称“海
口中院”)申请对海南公司进行破产清算。 
一、最新进展情况 
2014 年 3 月 14 日本公司收到海口中院下发的(2013)
海中法破(预)字第 7 号《民事裁定书》,海口中院于 2014
年2月27日裁定受理本公司提出的对海南公司破产清算的申
请,现将有关情况公告如下: 
海口中院认为:新达公司的住所地在海口市国贸大道 48
号新达商务大厦,该司是由海南省工商行政管理局核准登记
的企业,故海口中院对本案有管辖权。因新达公司不能清偿
到期债务,故深物业股份公司提出对新达公司进行破产清算1  
的申请符合受理条件。依照《中华人民共和国企业破产法》
第二条第一款、第三条、第七条第二款之规定,裁定如下: 
受理申请人深圳市物业发展(集团)股份有限公司对被
申请人海南新达开发总公司破产清算的申请。 
本裁定自即日起生效。 
二、其他情况 
本公司已对海南公司账务进行了全额计提,破产清算对
本公司财务状况无影响。 
具体情况请查阅本公司2011年11月28日发布的《董事会
决议公告》。 特此公告 备查文件:海南省海口市中级人民法院《民事裁定书》((2013)
海中法破(预)字第 7 号) 深圳市物业发展(集团)股份有限公司 
董事会 
二〇一四年三月十五日 2 

使用 UIE 进行信息抽取

我们使用PaddleNLP Taskflow API直接抽取公告中的关键信息,无需训练哦。

详情可参考:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie 。

第一次使用时,会自动下载默认模型到默认的位置。此方案无需依赖GPU也可以运行。


# 使用pprint增加输出可读性
from pprint import pprint
from paddlenlp import Taskflow
实体抽取

针对同一篇公告,可以设置不同的任务,根据需求,改变schema而不需要重新训练通用模型。对于本示例,第一个任务是获得受理的法院和受理时间,属于实体抽取的任务。


import paddlenlp
paddlenlp.__version__
# 设置不同的schema
# 实体抽取
from paddlenlp import Taskflow
schema = ['受理时间', '受理法院']
ie = Taskflow('information_extraction', schema=schema)
pprint(ie(record))
[2022-09-08 16:13:09,325] [    INFO] - Downloading model_state.pdparams from https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base_v1.0/model_state.pdparams
100%|██████████| 450M/450M [00:13<00:00, 33.9MB/s] 
[2022-09-08 16:13:24,402] [    INFO] - Downloading model_config.json from https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/model_config.json
100%|██████████| 377/377 [00:00<00:00, 308kB/s]
[2022-09-08 16:13:24,463] [    INFO] - Downloading vocab.txt from https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/vocab.txt
100%|██████████| 182k/182k [00:00<00:00, 2.30MB/s]
[2022-09-08 16:13:24,607] [    INFO] - Downloading special_tokens_map.json from https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/special_tokens_map.json
100%|██████████| 112/112 [00:00<00:00, 144kB/s]
[2022-09-08 16:13:24,670] [    INFO] - Downloading tokenizer_config.json from https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/tokenizer_config.json
100%|██████████| 172/172 [00:00<00:00, 236kB/s]
[2022-09-08 16:13:24,734] [    INFO] - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load '/home/aistudio/.paddlenlp/taskflow/information_extraction/uie-base'.
W0908 16:13:24.764302 11173 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 11.2
W0908 16:13:24.768028 11173 gpu_resources.cc:91] device: 0, cuDNN Version: 8.2.
[2022-09-08 16:13:27,395] [    INFO] - Converting to the inference model cost a little time.
[2022-09-08 16:13:38,248] [    INFO] - The inference model save in the path:/home/aistudio/.paddlenlp/taskflow/information_extraction/uie-base/static/inference
[{'受理时间': [{'end': 440,'probability': 0.8998520281582252,'start': 429,'text': '2014\n年2月27日'}],'受理法院': [{'end': 824,'probability': 0.45413020967631823,'start': 812,'text': '海南省海口市中级人民法院'}]}]
关系抽取

第二个任务是获得公告中提到的公司之间的关系,是一个关系抽取的任务。对于比较短的公告,在本示例中选择将全文直接输入进行抽取,并不会影响效果。对于长篇幅的公告,多个任务都使用全文作为输入会降低性能。

# 关系抽取
# print(record)
from paddlenlp import Taskflow
schema = {'公司': ['母公司', '子公司', '股东']}
ie.set_schema(schema)
pprint(ie(record))
[{'公司': [{'end': 876,'probability': 0.2903287813637405,'relations': {'子公司': [{'end': 212,'probability': 0.8585539059833636,'start': 202,'text': '海南新达开发总\n公司'}]},'start': 859,'text': '深圳市物业发展(集团)股份有限公司'},{'end': 571,'probability': 0.45863343911127075,'relations': {'子公司': [{'end': 212,'probability': 0.7908269167861341,'start': 202,'text': '海南新达开发总\n公司'}],'股东': [{'end': 668,'probability': 0.300250129676769,'start': 651,'text': '深圳市物业发展(集团)股份有限公司'}]},'start': 564,'text': '深物业股份公司'},{'end': 668,'probability': 0.32902502812567036,'relations': {'子公司': [{'end': 212,'probability': 0.8585539059833636,'start': 202,'text': '海南新达开发总\n公司'}]},'start': 651,'text': '深圳市物业发展(集团)股份有限公司'}]}]
长文本的答案获取

UIE对于词和句子的抽取效果比较好,但是对应大段的文字结果,还是需要传统的正则方式作为配合,在本次使用的pdf中,还需要获得法院具体的判决结果,使用正则表达式可灵活匹配想要的结果。


start_word = '如下'
end_word = '特此公告'start = re.search(start_word, record)
end = re.search(end_word, record)
print(record[start.span()[1]:end.span()[0]])
: 
海口中院认为:新达公司的住所地在海口市国贸大道 48
号新达商务大厦,该司是由海南省工商行政管理局核准登记
的企业,故海口中院对本案有管辖权。因新达公司不能清偿
到期债务,故深物业股份公司提出对新达公司进行破产清算1  
的申请符合受理条件。依照《中华人民共和国企业破产法》
第二条第一款、第三条、第七条第二款之规定,裁定如下: 
受理申请人深圳市物业发展(集团)股份有限公司对被
申请人海南新达开发总公司破产清算的申请。 
本裁定自即日起生效。 
二、其他情况 
本公司已对海南公司账务进行了全额计提,破产清算对
本公司财务状况无影响。 
具体情况请查阅本公司2011年11月28日发布的《董事会
决议公告》。 
事件抽取

使用UIE进行信息抽取时,如果遇到效果不好的情况,则需要根据实际任务调整schema,比如抽取董事会公告时,如果将会议作为事件抽取,则无法获得完整的信息。


# 已经转为txt保存的公告文件
with open('work/input/000061_61ac2b0f13d6467b056b263d.txt', 'r') as f:file_data = f.readlines()record = ''
for data in file_data:record += data
print(record)schema = {"会议": ['时间', '应到', '实到', '主持']}
ie = Taskflow('information_extraction', schema=schema)
pprint(ie(record))
证券代码:000061          证券简称:农产品      公告编号:2021-044 
深圳市农产品集团股份有限公司 
第八届董事会第四十八次会议决议公告 
本公司及董事会全体成员保证信息披露的内容真实、准确、完
整,没有虚假记载、误导性陈述或重大遗漏。 
深圳市农产品集团股份有限公司(以下简称“公司”)第八届董
事会第四十八次会议于 2021 年 10 月 27 日(星期三)上午 10:00 在
深圳市福田区深南大道 7028 号时代科技大厦 13 楼海吉星会议室召
开。会议通知于 2021 年 10 月 24 日以书面或电子邮件形式发出。会
议应到董事 12 名,实到董事 10 名,独立董事宁钟先生因公未能出
席会议,委托独立董事刘鲁鱼先生代为出席并表决;董事陈穗生先
生因公未能出席会议,委托董事向自力先生代为出席并表决。公司
监事及高级管理人员列席了本次会议。本次会议的召开符合《公司
法》及公司《章程》的规定。会议由董事长黄伟先生主持,经全体
与会董事认真审议并逐项表决通过以下议案: 
一、2021 年第三季度报告 
详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《2021 年第三季
度报告》(公告编号:2021-046)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 二、关于同意全资子公司收购担保公司 60%股权的议案 详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《关于同意全资
子公司收购担保公司 60%股权的公告》(公告编号:2021-047)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 三、关于同意控股子公司广西新柳邕公司为认购广西新柳邕项
目的银行按揭贷款客户提供阶段性担保的议案 
详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《关于控股子公
司广西新柳邕公司为认购广西新柳邕项目的银行按揭贷款客户提供
阶段性担保的公告》(公告编号:2021-048)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 四、关于续聘会计师事务所的议案 
详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《关于拟续聘会
计师事务所的公告》(公告编号:2021-049)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 
本议案尚须提交公司股东大会审议。 五、关于向银行申请综合授信额度的议案 
公司部分银行授信额度即将到期,为保障公司有充足的银行授信额度,同意公司向以下两家银行申请综合授信额度,具体如下: 
一、向中国民生银行股份有限公司深圳分行申请不超过人民币 5
亿元综合授信额度。 
二、向招商银行股份有限公司深圳分行申请不超过人民币 6 亿
元综合授信额度。 
上述合计不超过 11 亿元的综合授信额度,期限不超过三年,担
保方式为信用担保。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 六、经理层《岗位聘任协议》 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 七、经理层《年度经营业绩责任书》 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 八、经理层《任期经营业绩责任书》 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 九、关于暂不召开股东大会的议案 
本次董事会后,暂不召集股东大会审议本次董事会通过的《关
于续聘会计师事务所的议案》,该议案后续将与其他需提交股东大会
议案一并提交股东大会审议,公司将另行召开董事会,确定并公告股东大会的召开时间。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 
特此公告。 深圳市农产品集团股份有限公司   董          事          会   
二〇二一年十月二十九日 
[2022-09-08 16:13:44,394] [    INFO] - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load '/home/aistudio/.paddlenlp/taskflow/information_extraction/uie-base'.
[{'会议': [{'end': 1134,'probability': 0.7193688610271387,'relations': {'主持': [{'end': 428,'probability': 0.47974251889164066,'start': 426,'text': '黄伟'}]},'start': 1130,'text': '股东大会'}]}]

结果说明UIE并没有将相关的内容和“会议”这个事件联系起来,此时使用实体抽取的schema,将所需的信息作为单独的实体进行抽取,就可以提升效果。


schema = ['会议时间', '应到', '实到', '主持人']
ie = Taskflow('information_extraction', schema=schema)
pprint(ie(record))
[{'主持人': [{'end': 428,'probability': 0.32195555942341514,'start': 426,'text': '黄伟'}],'会议时间': [{'end': 204,'probability': 0.7182057639475943,'start': 175,'text': '2021 年 10 月 27 日(星期三)上午 10:00'}],'实到': [{'end': 302,'probability': 0.956548146017763,'start': 295,'text': '董事 10 名'}],'应到': [{'end': 292,'probability': 0.9237980841199089,'start': 285,'text': '董事 12 名'}]}]
使用正则提升效果

对于长文本,可以根据关键词进行分割后抽取,但是对于多个实体,比如这篇公告中,通过的多个议案,就无法使用UIE抽取。

schema = ['通过议案']
start_word = '通过以下议案'
start = re.search(start_word, record)
input_data = record[start.span()[0]:]
print(input_data)
ie = Taskflow('information_extraction', schema=schema)
pprint(ie(input_data))
通过以下议案: 
一、2021 年第三季度报告 
详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《2021 年第三季
度报告》(公告编号:2021-046)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 二、关于同意全资子公司收购担保公司 60%股权的议案 详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《关于同意全资
子公司收购担保公司 60%股权的公告》(公告编号:2021-047)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 三、关于同意控股子公司广西新柳邕公司为认购广西新柳邕项
目的银行按揭贷款客户提供阶段性担保的议案 
详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《关于控股子公
司广西新柳邕公司为认购广西新柳邕项目的银行按揭贷款客户提供
阶段性担保的公告》(公告编号:2021-048)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 四、关于续聘会计师事务所的议案 
详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券
报》、《上海证券报》、《证券日报》及巨潮资讯网的《关于拟续聘会
计师事务所的公告》(公告编号:2021-049)。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 
本议案尚须提交公司股东大会审议。 五、关于向银行申请综合授信额度的议案 
公司部分银行授信额度即将到期,为保障公司有充足的银行授信额度,同意公司向以下两家银行申请综合授信额度,具体如下: 
一、向中国民生银行股份有限公司深圳分行申请不超过人民币 5
亿元综合授信额度。 
二、向招商银行股份有限公司深圳分行申请不超过人民币 6 亿
元综合授信额度。 
上述合计不超过 11 亿元的综合授信额度,期限不超过三年,担
保方式为信用担保。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 六、经理层《岗位聘任协议》 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 七、经理层《年度经营业绩责任书》 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 八、经理层《任期经营业绩责任书》 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 九、关于暂不召开股东大会的议案 
本次董事会后,暂不召集股东大会审议本次董事会通过的《关
于续聘会计师事务所的议案》,该议案后续将与其他需提交股东大会
议案一并提交股东大会审议,公司将另行召开董事会,确定并公告股东大会的召开时间。 
同意票数 12 票,反对票数 0 票,弃权票数 0 票。 
特此公告。 深圳市农产品集团股份有限公司   董          事          会   
二〇二一年十月二十九日 
[2022-09-08 16:13:50,534] [    INFO] - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load '/home/aistudio/.paddlenlp/taskflow/information_extraction/uie-base'.
[{'通过议案': [{'end': 1129,'probability': 0.7701290743143261,'start': 1113,'text': '《关\n于续聘会计师事务所的议案》'}]}]

根据需要抽取信息的特征,此时则需要使用正则的方式来对相关的条目进行抽取,设定适当的正则抽取规则。

# 正则匹配“一 二 三 四 五 六 七 八 九 十” 
print(re.findall(r"[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341]、.*\n", input_data))
['一、2021 年第三季度报告 \n', '二、关于同意全资子公司收购担保公司 60%股权的议案 详见公司于 2021 年 10 月 29 日刊登在《证券时报》、《中国证券\n', '三、关于同意控股子公司广西新柳邕公司为认购广西新柳邕项\n', '四、关于续聘会计师事务所的议案 \n', '五、关于向银行申请综合授信额度的议案 \n', '一、向中国民生银行股份有限公司深圳分行申请不超过人民币 5\n', '二、向招商银行股份有限公司深圳分行申请不超过人民币 6 亿\n', '六、经理层《岗位聘任协议》 \n', '七、经理层《年度经营业绩责任书》 \n', '八、经理层《任期经营业绩责任书》 \n', '九、关于暂不召开股东大会的议案 \n']

效果提升

除了通过根据文本的特征,制定适合的正则规则外,也可以通过增加小样本训练提升数据。

推荐使用数据标注平台doccano或labelstudio进行数据标注,同时 PaddleNLP 也支持微调训练、预测部署,具体的使用方法可以参考:

  • 工单信息抽取

  • 快递单信息抽取

当然,最全的信息在官方文档上哦:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie

相关文章:

使用PaddleNLP UIE模型提取上市公司PDF公告关键信息

项目地址&#xff1a;使用PaddleNLP UIE模型抽取PDF版上市公司公告 - 飞桨AI Studio星河社区 (baidu.com) 背景介绍 本项目将演示如何通过PDFPlumber库和PaddleNLP UIE模型&#xff0c;抽取公告中的相关信息。本次任务的PDF内容是破产清算的相关公告&#xff0c;目标是获取受理…...

软件工程师,OpenAI Sora驾到,快来围观

概述 近期&#xff0c;OpenAI在其官方网站上公布了Sora文生视频模型的详细信息&#xff0c;展示了其令人印象深刻的能力&#xff0c;包括根据文本输入快速生成长达一分钟的高清视频。Sora的强大之处在于其能够根据文本描述&#xff0c;生成长达60秒的视频&#xff0c;其中包含&…...

【Linux 04】编辑器 vim 详细介绍

文章目录 &#x1f308; Ⅰ 基本概念&#x1f308; Ⅱ 基本操作1. 进入 / 退出 vim2. vim 模式切换 &#x1f308; Ⅲ 命令模式1. 光标的移动2. 复制与粘贴3. 剪切与删除4. 撤销与恢复 &#x1f308; Ⅳ 底行模式1. 保存文件2. 查找字符3. 退出文件4. 替换内容5. 显示行号6. 外…...

KMP算法详解

1. 问题引入 链接&#xff1a;leetcode_28 题目&#xff1a;s1字符串是否包含s2字符串&#xff0c;如果包含返回s1中包含s2的最左开头位置&#xff0c;不包含返回-1 暴力方法就是s1的每个位置都做开头&#xff0c;然后去匹配s2整体&#xff0c;时间复杂度O(n*m) KMP算法可以…...

ubuntu22.04@laptop OpenCV Get Started: 013_contour_detection

ubuntu22.04laptop OpenCV Get Started: 013_contour_detection 1. 源由2. 应用Demo2.1 C应用Demo2.2 Python应用Demo 3. contour_approx应用3.1 读取图像并将其转换为灰度格式3.2 应用二进制阈值过滤算法3.3 查找对象轮廓3.4 绘制对象轮廓3.5 效果3.6 CHAIN_APPROX_SIMPLE v.s…...

[ai笔记5] 个人AI资讯助手实战

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第5篇分享&#xff0c;也是把ai场景化应用的第一篇实操内容&#xff01; 既然要充分学习和了解ai&#xff0c;自然少不了要时常看看ai相关资讯&#xff0c;所以今天特地用字节的“扣子”做了一个ai的资讯…...

QT+OSG/osgEarth编译之八十九:osgdb_ply+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_ply)

文章目录 一、osgdb_ply介绍二、文件分析三、pro文件四、编译实践一、osgdb_ply介绍 斯坦福三角形格式(Stanford Triangle Format)是一种用于存储三维模型数据的文件格式,也称为 PLY 格式。它最初由斯坦福大学图形实验室开发,用于存储和共享三维扫描和计算机图形数据。 P…...

机器人专题:我国机器人产业园区发展现状、问题、经验及建议

今天分享的是机器人系列深度研究报告&#xff1a;《机器人专题&#xff1a;我国机器人产业园区发展现状、问题、经验及建议》。 &#xff08;报告出品方&#xff1a;赛迪研究院&#xff09; 报告共计&#xff1a;26页 机器人作为推动工业化发展和数字中国建设的重要工具&…...

算法沉淀——哈希算法(leetcode真题剖析)

算法沉淀——哈希算法 01.两数之和02.判定是否互为字符重排03.存在重复元素04.存在重复元素 II05.字母异位词分组 哈希算法&#xff08;Hash Algorithm&#xff09;是一种将任意长度的输入&#xff08;也称为消息&#xff09;映射为固定长度的输出的算法。这个输出通常称为哈希…...

深入理解Redis哨兵原理

哨兵模式介绍 在深入理解Redis主从架构中Redis 的主从架构中&#xff0c;由于主从模式是读写分离的&#xff0c;如果主节点&#xff08;master&#xff09;挂了&#xff0c;那么将没有主节点来服务客户端的写操作请求&#xff0c;也没有主节点给从节点&#xff08;slave&#…...

MySQL-存储过程(PROCEDURE)

文章目录 1. 什么是存储过程&#xff1f;2. 存储过程的优点3. MySQL中的变量3.1 系统变量3.2 用户自定义变量3.3 局部变量 4. 存储过程的相关语法4.1 创建存储过程&#xff08;CREATE&#xff09;4.2 查看存储过程&#xff08;SHOW&#xff09;4.3 修改存储过程&#xff08;ALT…...

linux系统监控工具prometheus的安装以及监控mysql

prometheus 安装服务端客户端监控mysql prometheus浏览器查看 安装 https://prometheus.io/download/下载客户端和服务端以及需要监控的所有的包服务端 官网下载下载prometheustar -xf prometheus-2.47.2.linux-amd64.tar.gz -C /usr/local/ cd /usr/local/ mv prometheus-2.…...

初识tensorflow程序设计模式

文章目录 建立计算图tensorflow placeholdertensorflow数值运算常用的方法 tensorboard启动tensorboard的方法 建立一维与二维张量建立一维张量建立二维张量建立新的二维张量 矩阵的基本运算矩阵的加法矩阵乘法与加法 github地址https://github.com/fz861062923/TensorFlow 建…...

【QT+QGIS跨平台编译】之三十八:【GDAL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、gdal介绍二、文件下载三、文件分析四、pro文件五、编译实践一、gdal介绍 GDAL(Geospatial Data Abstraction Library)是一个用于读取、写入和处理地理空间数据的开源库。它支持多种栅格和矢量地理空间数据格式,包括常见的GeoTIFF、Shapefile、NetCDF、HDF5等,…...

黑马鸿蒙教程学习1:Helloworld

今年打算粗略学习下鸿蒙开发&#xff0c;当作兴趣爱好&#xff0c;通过下华为那个鸿蒙开发认证&#xff0c; 发现黑马的课程不错&#xff0c;有视频和完整的代码和课件下载&#xff0c;装个devstudio就行了&#xff0c;建议32G内存。 今年的确是鸿蒙大爆发的一年呀&#xff0c;…...

蓝桥杯每日一题------背包问题(四)

前言 前面讲的都是背包的基础问题&#xff0c;这一节我们进行背包问题的实战&#xff0c;题目来源于一位朋友的询问&#xff0c;其实在这之前很少有题目是我自己独立做的&#xff0c;我一般习惯于先看题解&#xff0c;验证了题解提供的代码是正确的后&#xff0c;再去研究题解…...

OpenAI发布Sora技术报告深度解读!真的太强了!

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…...

AJAX——接口文档

1 接口文档 接口文档&#xff1a;描述接口的文章 接口&#xff1a;使用AJAX和服务器通讯时&#xff0c;使用的URL&#xff0c;请求方法&#xff0c;以及参数 传送门&#xff1a;AJAX阶段接口文档 <!DOCTYPE html> <html lang"en"><head><meta c…...

leetcode hot100不同路径

本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组&#xff1a;dp[i][j]表示走到&#xff08;i&#xff0c;j&#xff09;有多少种路径 确定递推公式&#xff1a;我们这里&#xff0c;只有两个移动方向&#xff0c;比如说我移动到&#xff08;i&#xff0c;j&#x…...

【前端工程化面试题目】webpack 的热更新原理

可以在顺便学习一下 vite 的热更新原理&#xff0c;请参考这篇文章。 首先有几个知识点需要明确 热更新是针对开发过程中的开发服务器的&#xff0c;也就是 webpack-dev-serverwebpack 的热更新不需要额外的插件&#xff0c;但是需要在配置文件中 devServer属性中配置&#x…...

不花一分钱,在 Mac 上跑 Windows(M1/M2 版)

这是在 MacOS M1 上体验最新 Windows11 的效果&#xff1a; VMware Fusion&#xff0c;可以运行 Windows、Linux 系统&#xff0c;个人使用 licence 免费 安装流程见 &#x1f449; https://zhuanlan.zhihu.com/p/452412091 从申请 Fusion licence 到下载镜像&#xff0c;再到…...

Attempt to call an undefined function glutInit

Attempt to call an undefined function glutInit 解决方法&#xff1a; 从这里下载PyOpenGL 的whl安装文件&#xff0c; https://drive.google.com/drive/folders/1mz7faVsrp0e6IKCQh8MyZh-BcCqEGPwx 安装命令举栗 pip install PyOpenGL-3.1.7-cp39-cp39-win_amd64.whl pi…...

AB测试最小样本量

1.AB实验过程 常见的AB实验过程&#xff0c;分流-->实验-->数据分析-->决策&#xff1a;分流&#xff1a;用户被随机均匀的分为不同的组实验&#xff1a;同一组内的用户在实验期间使用相同的策略&#xff0c;不同组的用户使用相同或不同的策略。数据收集&#xff1a;…...

在Spring中事务失效的场景

在Spring框架中&#xff0c;事务管理是通过AOP&#xff08;面向切面编程&#xff09;实现的&#xff0c;主要依赖于Transactional注解。然而&#xff0c;在某些情况下&#xff0c;事务可能会失效。以下是一些可能导致Spring事务失效的常见场景&#xff1a; 非public方法&#…...

Rust 学习笔记 - 变量声明与使用

前言 任何一门编程语言几乎都脱离不了&#xff1a;变量、基本类型、函数、注释、循环、条件判断&#xff0c;这是一门编程语言的语法基础&#xff0c;只有当掌握这些基础语法及概念才能更好的学习 Rust。 变量介绍 Rust 是一种强类型语言&#xff0c;但在声明变量时&#xf…...

windows 下跑起大模型(llama)操作笔记

原贴地址&#xff1a;https://testerhome.com/topics/39091 前言 国内访问 chatgpt 太麻烦了&#xff0c;还是本地自己搭一个比较快&#xff0c;也方便后续修改微调啥的。 之前 llama 刚出来的时候在 mac 上试了下&#xff0c;也在 windows 上用 conda 折腾过&#xff0c;环…...

人工智能专题:基础设施行业智能化的基础设施,自智网络双价值分析

今天分享的是人工智能系列深度研究报告&#xff1a;《人工智能专题&#xff1a;基础设施行业智能化的基础设施&#xff0c;自智网络双价值分析》。 &#xff08;报告出品方&#xff1a;埃森哲&#xff09; 报告共计&#xff1a;32页 自智网络驱动的电信产业变革 经过多年的…...

docker 编译安装redis脚本

在Docker中编译安装Redis通常不是一个常见的做法&#xff0c;因为Redis官方提供了预编译的Docker镜像&#xff0c;这些镜像包含了已经编译好的Redis二进制文件。不过&#xff0c;如果你有特殊需求&#xff0c;想要自己从源代码编译Redis并打包成Docker镜像&#xff0c;你可以使…...

鸿蒙开发系列教程(二十三)--List 列表操作(2)

列表样式 1、设置内容间距 在列表项之间添加间距&#xff0c;可以使用space参数&#xff0c;主轴方向 List({ space: 10 }) { … } 2、添加分隔线 分隔线用来将界面元素隔开&#xff0c;使单个元素更加容易识别。 startMargin和endMargin属性分别用于设置分隔线距离列表侧…...

C#根据权重抽取随机数

&#xff08;游戏中一个很常见的简单功能&#xff0c;比如抽卡抽奖抽道具&#xff0c;或者一个怪物有多种攻击动作&#xff0c;按不同的权重随机出个攻击动作等等……&#xff09; 假如有三种物品 A、B、C&#xff0c;对应的权重分别是A&#xff08;50&#xff09;&#xff0c…...

SORA:OpenAI最新文本驱动视频生成大模型技术报告解读

Video generation models as world simulators&#xff1a;作为世界模拟器的视频生成模型 1、概览2、Turning visual data into patches&#xff1a;将视觉数据转换为补丁3、Video compression network&#xff1a;视频压缩网络4、Spacetime Latent Patches&#xff1a;时空潜在…...

阿里云第七代云服务器ECS计算c7、通用g7和内存r7配置如何选择?

阿里云服务器配置怎么选择合适&#xff1f;CPU内存、公网带宽和ECS实例规格怎么选择合适&#xff1f;阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择&#xff0c;例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…...

视觉slam十四讲学习笔记(六)视觉里程计 1

本文关注基于特征点方式的视觉里程计算法。将介绍什么是特征点&#xff0c;如何提取和匹配特征点&#xff0c;以及如何根据配对的特征点估计相机运动。 目录 前言 一、特征点法 1 特征点 2 ORB 特征 FAST 关键点 BRIEF 描述子 3 特征匹配 二、实践&#xff1a;特征提取…...

PyTorch-线性回归

已经进入大模微调的时代&#xff0c;但是学习pytorch&#xff0c;对后续学习rasa框架有一定帮助吧。 <!-- 给出一系列的点作为线性回归的数据&#xff0c;使用numpy来存储这些点。 --> x_train np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],[9.779], [6.1…...

C++数据结构与算法——栈与队列

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…...

掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验

原生智能是HarmonyOS NEXT的核心亮点之一&#xff0c;依托HarmonyOS SDK丰富全面的开放能力&#xff0c;开发者只需通过几行代码&#xff0c;即可快速实现AI功能。新浪新闻作为鸿蒙原生应用开发的先行者之一&#xff0c;从有声资讯入手&#xff0c;将基于Speech Kit朗读控件上线…...

2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主…...

C/C++如何把指针所指向的指针设为空指针?

实践出真知&#xff0c;指针对于初学的友友来说&#xff0c;头都要大了。喵喵一直遵循在实践中学&#xff0c;在学习中实践&#xff0c;相信你也会有所得&#xff01; 以下是该问题的解决方案&#xff1a; int** ptrPtr new int*; // 创建指向指针的指针 int* ptr new int;…...

第三节:基于 InternLM 和 LangChain 搭建你的知识库(课程笔记)

视频链接&#xff1a;https://www.bilibili.com/video/BV1sT4y1p71V/?vd_source3bbd0d74033e31cbca9ee35e111ed3d1 文档地址&#xff1a; https://github.com/InternLM/tutorial/tree/main/langchain 课程笔记&#xff1a; 1.仅仅包含训练时间点之前的数据&#xff0c;无法…...

qt-C++笔记之打印所有发生的事件

qt-C笔记之打印所有发生的事件 code review! 文章目录 qt-C笔记之打印所有发生的事件1.ChatGPT问答使用 QApplication 的 notify 方法使用 QObject 的 event 方法 2.使用 QObject 的 event 方法3.使用 QApplication 的 notify 方法 1.ChatGPT问答 在Qt C中&#xff0c;若要打…...

pytorch 实现线性回归(深度学习)

一 查看原始函数 初始化 %matplotlib inline import random import torch from d2l import torch as d2l 1.1 生成原始数据 def synthetic_data(w, b, num_examples):x torch.normal(0, 1, (num_examples, len(w)))y torch.matmul(x, w) bprint(x:, x)print(y:, y)y tor…...

[Doris] Doris的安装和部署 (二)

文章目录 1.安装要求1.1 Linux操作系统要求1.2 软件需求1.3 注意事项1.4 内部端口 2.集群部署2.1 操作系统安装要求2.2 下载安装包2.3 解压2.4 配置FE2.5 配置BE2.6 添加BE2.7 FE 扩容和缩容2.8 Doris 集群群起脚本 3.图形化 1.安装要求 1.1 Linux操作系统要求 1.2 软件需求 1…...

【QT+QGIS跨平台编译】之三十五:【cairo+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、cairo介绍二、文件下载三、文件分析四、pro文件五、编译实践一、cairo介绍 Cairo是一个功能强大的开源2D图形库,它提供了一套跨平台的API,用于绘制矢量图形和文本。Cairo支持多种输出目标,包括屏幕、图像文件、PDF、SVG等。 Cairo的设计目标是简单易用、高效…...

MySQL(基础)

第01章_数据库概述 1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多…...

STM32F1 - 中断系统

Interrupt 1> 硬件框图2> NVIC 中断管理3> EXTI 中断管理3.1> EXTI与NVIC3.2> EXTI内部框图 4> 外部中断实验4.1> 实验概述4.2> 程序设计 5> 中断向量表6> 总结 1> 硬件框图 NVIC&#xff1a;Nested Vectored Interrupt Controller【嵌套向量…...

【Linux系统化学习】缓冲区

目录 缓冲区 一个样例 现象解释 缓冲区存在的位置 缓冲区 在刚开始学习C语言的时候我们就听过缓冲区这个名词&#xff0c;很是晦涩难懂&#xff1b;在Linux下进程退出时也包含缓冲区&#xff0c;因此缓冲区到底是什么&#xff1f;有什么作用&#xff1f; 让我们先从一个小…...

基于BP算法的SAR成像matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 BP算法的基本原理 4.2 BP算法的优点与局限性 5.完整工程文件 1.课题概述 基于BP算法的SAR成像。合成孔径雷达&#xff08;SAR&#xff09;是一种高分辨率的雷达系统&#xff0c;能够在各种天气和光…...

【C++ STL】你真的了解string吗?浅谈string的底层实现

文章目录 底层结构概述扩容机制浅拷贝与深拷贝插入和删除的效率浅谈VS和g的优化总结 底层结构概述 string可以帮助我们很好地管理字符串&#xff0c;但是你真的了解她吗&#xff1f;事实上&#xff0c;string的设计是非常复杂的&#xff0c;拥有上百个接口&#xff0c;但最常用…...

17.3.1.3 灰度

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 灰度的算法主要有以下三种&#xff1a; 1、最大值法: 原图像&#xff1a;颜色值color&#xff08;R&#xff0c;G&#xff0c;B&a…...

基于CAS操作的atomic原子类型

在上一节的卖票程序中&#xff0c;我们讲解了如何在多线程中保证临界资源的正确访问——使用互斥锁&#xff0c;即 lock_guard<mutex> lock(mtx); count;lock_guard<mutex> lock(mtx); count--; 从汇编角度解释线程间互斥-mutex互斥锁与lock_guard的使用-CSDN博客…...